Я совсем новичок в Drupal. Но на новом сайте хочу сделать так, чтобы при выводе тизера изображение, вставленное в тексте (изображения обычно добавляю в начало статьи) не попадало в тизер. Очевидные решения по типу сделать для изображения display:none знаю, такие не подходят. Интересует именно чтобы на этапе формирования тизера для новой статьи в базу попадал текст тизера без изображения. Если подскажете, где формируется тизер (в каком модуле, какими функциями) при сохранении статьи, тоже буду благодарен и попробую с кодом разобраться сам.
Комментарии
Тизер формируется простым обрезанием текста до определенного количества символов. Поэтому формирование тизера без изображение, вам нужно сделать на этапе вывода. Например для тизера выбрать текстовый формат - filtered html - он вырежет все теги, которые в нем не разрешены.
Насколько я понимаю, все не совсем так. Тизер формируется на этапе сохранения или редактирования материала и сохраняется в базе данных в таблице node_revision. Там есть поле,которое содержит сформированный материал, и он выводиться на экран в том виде, в каком там сохранен. Причем формируется он не простым обрезанием, а сложной процедурой, учитывающей абзацы и теги, иначе получались бы обрезанные теги. Вот в эту процедуру я и хочу внести изменения, чтобы влиять на формированный тизер. Где она (эта процедура) находиться? Вырезать лишние теги в node.tpl из переменной как вариант рассматривал, но зачем нагружать еще одной процедурой на выводе каждый раз и нагружать сервер, если это можно сделать на вводе один раз.
Поле не выводиться в таком виде, в каком оно сохранено. Для того, чтобы не получилось обрезанных тегов, как раз и используются текстовые форматы - они формируют вывод на этапе вывода, а не сохранения.
Почитайте про текстовые форматы Dr-l.
Честно говоря, не могу понять, о чем вы. Поле teaser в таблице node_revision содержит текст тизера в том виде, в котором он выводится на экран, т.е. в обрезанном, и естественно с учетом тегов. формируется он при сохранении материала, и никак не при его выводе на экран. На экран выводиться именно содержание поля teaser из таблицы node_revision, возможно и с какой то обработкой, но не более того. Вот какой процедурой и где это поле формируется, мне и нужно, чтобы убрать ненужный тег на этапе формирования этого поля. Если знаете другое решение, про которое говорите, просто подскажите, где что включить, я реально не пойму о чем вы.
Похоже, гугл не знает, что такое "текстовые форматы Dr-l". Где поискать, что это, и как они относятся к теме?
А, дошло через несколько минут, что Dr-l это Drupal
http://drupal.org/node/104659
http://www.drupal.ru/node/53457
материалов на самом деле много.вариантов тоже много. от css, хуков до темизации.
самое простое и наглядное - убирание тега во всем тизере через темизацию tpl.php. во многих темах даже сам тизер вынесен в переменную $teaser. скажем так, это происходит уже после того, как все срендерено, но еще до вывода на экран.
почитайте ссылки, которые выше, там довольно подробно и с примерами.
правильнее конечно через хук в своем модуле, либо в template.php в препроцессе над нодой произвести необходимые манипуляции. это как раз на момент рендеринга происходит.
Спасибо, но про эти методы я в курсе, они все на этапе вывода. Проще, в конце концов, через View при выводе поля тизера убрать все теги (для этого там есть галочка, и на этом пока и остановился). Мне бы повлиять именно на формирование тизера на этапе ввода (записи его в поле teaser таблицы node_revision, чтобы один раз и все, а не при каждом выводе его вырезать. Вот мне бы кто подсказал, где он формируется и записывается в базу, я б его там и.....
есть еще момент:
попробуйте практиковать разделение разнотипных данных по разным полям
имг отдельно, текст отдельно
имхо - визуальные редакторы в D это зло)
такой подход дает больше возможностей для представления контента, для повышения его интерактивности.
хорошо структурированный по полям материал и вьюс - очень мощная связка.
Ну, я в общем так и делаю. Изображения загружаю через CCK+field_image, upload и lightbox, но ведь их все равно в текст статьи приходиться вставлять, где они сохраняются в виде тэгов. Ну и вывод анонсов (тизеров) как раз через views реализую. Ну, в общем, пока остановился на очистке тэгов в формате поля во views + форматирование через css. Вроде пока результат здесь и здесь (оба через views) устраивает, на нем и остановлюсь.
Всем спасибо большое.
Подытоживаю решение:
Чтобы из сформированного тизера удалить изображения и все теги, можно его выводить через модуль views при этом включить для выводимого поля опцию Strip HTML tags.
Другой вариант, обрабатывать содержимое текста тизера в переменной для вывода (вроде бы $teaser) непосредственно при выводе в темизации с помощью своих функций.