форум общения русскоязычных пользователей CMS Текстпаттерн
Вы не зашли.
Здравствуйте товарищи.
Я разработал себе пару простеньких плагинов для вставки Флешек и создания mp3 проигрывателя. Столкнулся с парой проблем. Решил не обсуждать это в разделе плагинов, а тут, где это положено.
1. Проблема.
Хочу между тегами <head> </head>
Разместить некий код. Мне показали пример. Я посмотрел на плагины других разработчиков, у каждого свои методы. Я нашел функцию, в которых возвращается требуемая строка, но в некоторых случаях не находил откуда эта функция вызывается.
Глядя на все это сделал так
function www_player_head() { global $prefs, $siteurl, $path_from_root; $find = '</head>'; $new_head = 'lalalalalalalalalala'; return str_replace ($find, $new_head . $find); } www_player_head();
Но ничего не происходит. Помогите пожалуйста. Укажите на ошибки. Заранее спасибо.
2. Проблема
Когда я вставляю в статье свой плагин
<www_player....
он при парсинге странички заключается в теги <p></p>
Т.е. в готовой страничке исходный код выглядит так
<p> <div>........ </div> <div>........</div> <object>............</object> </p>
И валидатор начинает ругаться.
Скажите пожалуйста, как мне избавиться от этих тегов открывающиего и закрывающего <p> </p>
Отредактированно Steve O. (11-03-2010 18:32:22)
Неактивен
О! Товарищи! С первой проблемой справился, взяв пример the_ghost
global $event, $jmdImgSel, $prefs; ob_start('www_head'); register_callback('www_head', "www_head"); function www_head($buffer) { $find = '</head>'; $new_head = '<script type="text/javascript" src="http://wwwow.ru/swf_object.js"></script>'; return str_replace($find, $new_head . $find, $buffer); }
Все заработало, только не понятно зачем нужны в данном случае глобальные переменные.
А со второй пока не справился.
О! И со второй проблемой справился тем же самым способом.
Поставил вначале и в конце строки идентификатор
www_start_player
....код
www_end_player
В тоге в страничке все выглядело так
<p>www_start_player
... код
www_end_player</p>
А потом вышеперечисленным способом нашел в странице и заменил
'<p>www_start_player' на ''
Тоже самое с закрывающим тегом.
Может это через одно место, но работает.
Мне немного стыдно за такой топорный способ. Посоветуйте пожалуйста, чем все это можно заменить?
Отредактированно Steve O. (10-03-2010 20:58:55)
Неактивен
Steve O. написал:
2. Проблема
Когда я вставляю в статье свой плагинКод:
<www_player....он при парсинге странички заключается в теги <p></p>
это делает textpie.
варианты отключение textpie:
1. пишем код так: ==<www_player.... </www_player>==
2. начать строку с пробела, т.е. "пробел"<www_player.... </www_player>
3. выключить texpie для всей статьи. при написании статьи указать "оставьть текст как есть"
Неактивен
А если мне нужно чтобы Текстайл работал для всей статьи, но не работал для моего тега?
3 ввариант отпадает
2 вариант неудобен совершенно
1 вариант тоже не пойдет потому что флешка все равно окажется внутри тега <p> </p> из предыдущего параграфа.
Неактивен
sbel написал:
это делает textpie.
Что есть textpie?
Неактивен
Steve O. написал:
2 вариант неудобен совершенно
дело привычки.
перевод строки, пробел, тег...
<txp:www_player playlist="The Best of 2010" > t: Artist - Track Name u: http://.... t: Artist - Track Name u: http://.... t: Artist - Track Name u: http://.... </txp:www_player>
Steve O. написал:
1 вариант тоже не пойдет потому что флешка все равно окажется внутри тега <p> </p> из предыдущего параграфа.
а зачем предыдущий параграф??
перевод строки, а потом уже ==<...
==<txp:www_player playlist="The Best of 2010" > t: Artist - Track Name u: http://.... t: Artist - Track Name u: http://.... t: Artist - Track Name u: http://.... </txp:www_player>==
Неактивен
advan написал:
sbel написал:
это делает textpie.
Что есть textpie?
наверное, имелось в виду textile
Неактивен
Я тоже постоянно пользуюсь пробелом, когда надо выключить textile для какой-то строки. Абсолютно удобно.
Неактивен
Раз уж зашел спор, я хочу пояснить, что я имею в виду.
1. ==....==
Допустим, что в статье я напишу так
Лялялялялял Тополя траливали! ==<txp:www_player ...> </txp:player>== тырым-пырым ололо!
Когда будет сгенерирован HTML код, о будет следующим:
<p>Лялялялялял Тополя траливали!<br /> <div class=''.....></div> <div class=''.....></div></p> <p>тырым-пырым ололо!</p>
Т.е. слой с флешкой оказывается внутри тегов <p></p>
Это первый довод, а второй - я ни разу не видел плагин который нужно было бы прописывать таким вот образом ==.....== это не удобно и как минимум - не солидно. Не только для себя, но и для других юзеров, желающих воспользоваться этим плагином.
2. С пробелом. Для вас-то юзать свои плагины таким образом может и удобно. А если вы его распространяете? Думаете юзер, мало понимающий в технической стороне вашего плагина, станет ставить пробелы? И так же, я не видел ни одного плагина, который бы прописывался таким образом.
В общем, я сильно упростил код своего плагина. Не стал делать идентификаторы, а тупо выискивал в $buffer такие строки '<p><div' и '</div></p>' заменял их на '<div' и '</div>' соответственно.
По любому не повредит, ибо тег <div> невалиден внутри абзаца.
Отредактированно Steve O. (11-03-2010 18:31:16)
Неактивен
Steve O. написал:
Не стал делать идентификаторы, а тупо выискивал в $buffer такие строки '<p><div' и '</div></p>' заменял их на '<div' и '</div>' соответственно.
По любому не повредит, ибо тег <div> невалиден внутри абзаца.
Слишком "нагло". Я бы сделал атрибут, типа fix_textile=1 и при его наличии удалял этот глюк. А так - я часто пользуюсь пробелом перед вставкой тега - ни разу не чувствовал себя от этого плохо. А вот если какой-то плагин сам удалит часть моей верстки - мало ли кто как сверстал - это будет приличная работа по выискиванию проблемы - уж поверьте.
Неактивен
Steve O. написал:
Раз уж зашел спор, я хочу пояснить, что я имею в виду.
1. ==....==
Допустим, что в статье я напишу такКод:
Лялялялялял Тополя траливали! ==<txp:www_player ...> </txp:player>== тырым-пырым ололо!
прошу прощения, имел в ввиду одно, сказал другое... я хотел сказать, что нужно добавить дополнительный перевод строки, т.е. должна перед тегом быть пустая строка, т.е. такой код:
Лялялялялял Тополя траливали! ==<txp:www_player ...> </txp:player>== тырым-пырым ололо!
теперь должно все быть ок.
а параграф - должен быть параграфом, т.е. начинаться с пустой строки и также и заканчиваться пустой строкой.
Steve O. написал:
Это первый довод, а второй - я ни разу не видел плагин который нужно было бы прописывать таким вот образом ==.....== это не удобно и как минимум - не солидно. Не только для себя, но и для других юзеров, желающих воспользоваться этим плагином.
2. С пробелом. Для вас-то юзать свои плагины таким образом может и удобно. А если вы его распространяете? Думаете юзер, мало понимающий в технической стороне вашего плагина, станет ставить пробелы? И так же, я не видел ни одного плагина, который бы прописывался таким образом.
при чем тут техническая сторона плагина??..
это стандартный textile, если он используется в статьях, то имеет смысл, хоть чуть-чуть почитать о нем.
Steve O. написал:
В общем, я сильно упростил код своего плагина. Не стал делать идентификаторы, а тупо выискивал в $buffer такие строки '<p><div' и '</div></p>' заменял их на '<div' и '</div>' соответственно.
По любому не повредит, ибо тег <div> невалиден внутри абзаца.
не стоит так делать, т.к. вместо одного не валидного кода может получиться другой еще более не валидный.
пример:
<p>123<div>.... </div></p> после замены получится открытый тег <p> <p>123<div>.... </div>
Неактивен
Ага, спасибо. На счет замены <p><div убедительно. Вернул уникальные идентификаторы на место.
А на счет ==...== и пробела по прежнему считаю не самым удобным вариантом. Юзер должен получить желаемый код, в каком бы месте статьи, и как бы он не вставил тег.
Мой прием решает эту задачу автоматически. )
Неактивен
Steve O. написал:
А на счет ==...== и пробела по прежнему считаю не самым удобным вариантом. Юзер должен получить желаемый код, в каком бы месте статьи, и как бы он не вставил тег.
Полностью согласен с предыдущими выступающими.
Юзер, который НЕ УМЕЕТ пользоваться Текстайлом, 100% никогда не воспользуется Вашим плагином.
Грамотному Юзеру использовать плагин стандартными для Текстайла методами (т.е. пробел, ==...==,<notextile>...</notextile>) труда не составит.
Так что не заморачивайтесь.
Неактивен
Steve O. написал:
Юзер должен получить желаемый код, в каком бы месте статьи, и как бы он не вставил тег.
Мой прием решает эту задачу автоматически. )
Надеюсь последний гвоздь, который убедит вас - теги не только в статьях юзают - ведь можно и в формы вставлять - а там textile нет.
Неактивен
froZZen, Я до сих пор не умею полноценно пользоваться Текстайлом. Не могу еще к нему привыкнуть. И в тоже время, я без особых проблем использую более 10 плагинов на своем сайте. У меня не возникает проблем со вставкой тега, с его использованием и валидностью кода. Никаких пробелов и == мне ставить не приходится и лезть лишний раз на форумы, чтобы узнать почему у меня не получается, блин, нормально вставить код.
the_ghost, да и это предусмотрено. Если найден идентификатор флешки без открывающего тега <p> то он будет просто удален. То же самое с закрывающим </p>
Не понятно в чем вы хотите убедить. Что лучше юзать пробелы и == ? Чем сделать ту же операцию самим плагином?
Неактивен
Steve O. написал:
froZZen, Я до сих пор не умею полноценно пользоваться Текстайлом. Не могу еще к нему привыкнуть. И в тоже время, я без особых проблем использую более 10 плагинов на своем сайте. У меня не возникает проблем со вставкой тега, с его использованием и валидностью кода. Никаких пробелов и == мне ставить не приходится и лезть лишний раз на форумы, чтобы узнать почему у меня не получается, блин, нормально вставить код.
the_ghost, да и это предусмотрено. Если найден идентификатор флешки без открывающего тега <p> то он будет просто удален. То же самое с закрывающим </p>
Не понятно в чем вы хотите убедить. Что лучше юзать пробелы и == ? Чем сделать ту же операцию самим плагином?
Лично я не хочу Вас ни в чем убеждать. Я хочу только сказать: если Вы не пользуетесь Текстайлом, то лучше его отключить и у Вас не будет никаких проблем.
Те же, кто им пользуется - знают как отключать его для решения каких-то своих проблем.
Отредактированно froZZen (13-03-2010 12:34:35)
Неактивен
Нет. Я пользуюсь Текстайлом, но пока не со всеми сталкивался. Например !..!, "http://....":что-то, h1. h2. *....*, и т.д... самые распространенные. Поэтому и не хочется отключать. А плагин тоже хочется вставить наипростейшим способом без дополнительных елозаний...
В общем, как я понял, на вкус и цвет фломастеры разные )))
Мне например хочется максимально упростить действия юзера.
Неактивен
Steve O. написал:
Мне например хочется максимально упростить действия юзера.
ИМХО (как профессионального программиста):
Каждая функция должна отвечать только за то для чего она предназначена.
Если функция предназначена для проигрывания музыки, то она должна только проигрывать музыку - именно этого от нее ожидает человек, который ей воспользуется.
Если хотите упростить действия Юзверя, то создайте функцию вставляющую корректно ЛЮБОЙ тэг в Текстайл или еще куда-нибудь.
Вот это будет профессиональный подход. (ИМХО, повторюсь)
Неактивен
froZZen написал:
Каждая функция должна отвечать только за то для чего она предназначена.
Если функция предназначена для проигрывания музыки, то она должна только проигрывать музыку - именно этого от нее ожидает человек, который ей воспользуется.
Если хотите упростить действия Юзверя, то создайте функцию вставляющую корректно ЛЮБОЙ тэг в Текстайл или еще куда-нибудь.
полностью с этим согласен. 1 функция - 1 действие.
и сам стараюсь придерживаться этого.
Неактивен
froZZen написал:
Если хотите упростить действия Юзверя, то создайте функцию вставляющую корректно ЛЮБОЙ тэг в Текстайл или еще куда-нибудь.
кстати... забиваю себе в ту-ду создание этой функции
после выходных постараюсь найти время на культурное оформление этого плагина.
Неактивен
froZZen написал:
Если хотите упростить действия Юзверя, то создайте функцию вставляющую корректно ЛЮБОЙ тэг в Текстайл или еще куда-нибудь.
Так я это и сделал.
Юзверь прописывает мой тег в любом месте статьи или формы. А дальше уже формируемый HTML код, Вставляется корректно, определяя свое положение в страничке.
Задача - валидно вставить флешку, содержащую в себе mp3 плеер. А валидно, потому что многие известные способы ее вставки оказываются невалидными.
К чему придирки? Хотите, чтобы юзверь каждый раз писал == == ? Вместо того, чтобы как полагается прописать тег и не париться?
Такое ощущение, что вы все либо тупые, либо не понимаем друг друга.
Повторюсь. Мой плагин имеет только одну функцию - вставляет флешку в статью, одновременно с этим определяет находится он внутри абзаца или нет, и удаляет теги переноса строки вокруг себя, если они есть. Вот и все.
Что тут плохого? Я не пойму. Вы ЗА то чтобы юзать пробелы и == ==?
Вы где-нибудь видели разработчика, который бы писал плагины так, чтобы их нужно было прописать такими вот способами? По вашему это профессионально?
Неактивен
Обзываться не хорошо В споре, как известно, рождается истина
Тут вам пыютаются донести, что подобное поведение, по крайней мере без уведомления об этом пользователя, не сликшом "в духе TXP". А что, если пользователь хочет вставить внутрь параграфа плеер? Вполне вероятно и такое.
Неактивен
Да, извините, конечно, немного вспылил. Я чесслово до сих пор не могу понять, зачем впихивать юзеру плагин, который добавит как минимум 4 ошибки в валидаторе? Он конечно может исправить положение, добавив == или пробел. Я всего навсего избавил его от этого.
На счет того, что кто-то захочет вставить флешку в параграф, я решил подумать и сделать дополнительную переменную, которая насильно отключит любые манипуляции с кодом. Но по умолчанию, эта функция будет отключена.
Учился на своем опыте. Когда меня в бешенство приводили плагины, которые уродуют HTML.
Неактивен
Плагин ничего не "уродует" - просто поведение textile требует изучения И иногда может удивить, если говорить о как бы ненужном параграфе. Но все же - поведение textile вполне логично и семантично и отвечает требования W3C. Подобный атрибут я бы сделал "по желанию", с указанием в хелпе плагина на эту мелочь. Поверьте, так будет лучше для всех его пользователей.
Неактивен