Пример задачи: вставить после второго абзаца в каждую из нод рендомную картинку. Т.е. ноуды уже готовые, и нужно каким-то образом в них "на лету" вставить эти картинки.
Я сделал это через фильтры. Так вот, все бы хорошо, если бы фильтры не пытались еще и воздействовать не только на целую ноду, но и на teaser.
Можно ли приказать фильтрам воздействовать только на body а не на teaser, или же фильтры слепы и действуют на все?
Комментарии
Kulibin пишет: Можно ли приказать фильтрам воздействовать только на body а не на teaser, или же фильтры слепы и действуют на все?
Некоторые сообщение вообще не имеют тела и целиком состоят из анонса (teaser). Например, если сообщение слишком короткое и полностью входит в анонс. Или если сообщение очень длинное, но содержит PHP-вставку, здесь оно тоже будет все показано в анонсе. Вы же хотите перевернуть все с ног на голову, приказав фильтрам работать только с body.
Лучше обойтись без правок фильтров.
В теме дизайна можно в page.tpl.php найдите кусок кода, который выводит переменную $content, внутри этой переменной найти знак разрыва "break". Выводите сразу после знака разрыва код, отвечающий за Вашу случайную картинку.
В таком решении фильтры будут воздействовать на анонс и тело как обычно. И можно будет спокойно добавлять/удалять фильтры, не заботясь о том как это повлияет на выбор случайной картинки.
Ну, это конечно решение, но совсем негибкое. Давайте придумаем гибче
"Некоторые сообщение вообще не имеют тела и целиком состоят из анонса (teaser)"
есть возможность жестко задать тизер через . Задали. И тогда делаем просто так, чтобы фильтры работали не над всем текстом, а только с частью текста после . Теоретически, получили то что хотели.
Вариант? (проверить пока не могу - друпала нет под рукой)
Kulibin2 (гостевой логин) says: И тогда делаем просто так, чтобы фильтры работали не над всем текстом, а только с частью текста после . Теоретически, получили то что хотели.
Если фильтры будут работать только с частью текста, то могут быть нестыковки. В нижней части сообщения некоторые тэги будут резаться, вверху будут показываться свободно. Фильтры должны работать со всем текстом, где бы не проходила линия раздела. На то они и фильтры. А требование показа случайной картинки - это в сфере действия дизайна, который отвечает за показ анонса и тела сообщения.
Хотя решать задачу можно и через фильтры и через дизайн.
а собственно зачем вставлять именно внутри нод эти картинки? Может просто так сверстать, чтобы это так выглядело, и выводить блок со случайной картинкой рядом с нодой, и никаких тизеров. Или надо принципиально именно внутри вставлять, чтобы в базе это сохранялось в теле ноды?
принципиально надо, чтобы тело ноды оставалось в базе нетронутым, а я уж его мял как хотел при выводе
по идее именно для этого фильтры и созданы...
Вставка картинок это просто пример. Полностью аналогичная задача возникает (и возникла), если попытаться "где-то вверху ноды" (не в самом верху, а например после нескольких абзацев) вставить рекламу того же бегуна. Иногда она будет в тизер попадать, а иногда нет. Но если несколько раз попадет, то тогда на страничке с тизерами мы нарушим правила бегуна - и получим от него по голове... А он нас кормит
Если же мы тизеры сможем правильно проставлять (чтобы теги не резались), то тогда проблема исчезнет и предложенный мною способ должен бы работать...
нормально отделять тизер не ломая теги пока невозможно, только вручную... вот если бы Вы написали модуль, реализующий эту задачу, Вас бы благодарило все друпал-сообщество
ну да, я и говорил что у меня "есть возможность жестко задать тизер"
Да блин, нету такой проблемы, чтобы вставить что-то в ТЕЛО ноды - надо сверстать нормально, вот для примера - http://lenta.ru/news/2007/08/14/file/ - справа кусок контента Сюжеты идёт до тела ноды, а выглядит, как будто в середине.
Вопрос не в верстке - см. ответ "Полностью аналогичная задача возникает..."