Фев
21
2010

Азы работы с модулем views в drupal

Не так давно ко мне обратилась одна девушка с просьбой рассказать ей о самых-самых азах работы с модулем views в drupal. После небольшой переписки с ней я написал довольно подробную инструкцию, которую далее и привожу. Надеюсь, что это поможет не только ей.

Views – это не тип материала. При помощи этого модуля ты просто можешь делать страницы, для которых ты довольно много чего можешь настроить. В частности тебе надо настроить что надо получить (заголовок, автора, дату, полный текст, аноннс и многое-многое другое…), плюс ты указываешь параметры сортировки (по дате создания, по названию, по автору и по прочим полям. по возрастанию или по убыванию), а так же ты задаёшь условия выборки, т.е. из всех материалов, которые у тебя есть в базе какие именно материалы надо выбрать (например это условия: «тип материала=новость», «опубликовано»=да и прочее-прочее).Т.е. ты фактически задаёшь свой SQL-запрос.

Для работы с views на странице модулей у тебя должны быть включены модули: Views и Views UI. Там есть еще в списке Views Exporter, но он тебе пока что не нужен.

views_installТеперь заходи на страницу: admin/build/views (тут и далее буду так писать страницы. Т.е. если у тебя на компе или в инете сайт на друпале открывается по адресу http://example.com, то заходи на страницу http://example.com/admin/build/views). Там ты увидишь что-то типа такого:

views_listing
Нажимай вверху на кнопку «Добавить».
Увидишь вот такую страницу:

create_view

Заполняй поля названия и описания и жми кнопку «далее».
Увидишь:

main_view_page
Это основное окно для работы с views’ами.

Теперь будем создавать собственно само представление (в друпале часто название этого модуля именно так переводят). Есть два способа вывода контента: материал или поля. В первом случае материалы выводятся в обычном своём виде, т.е. там сразу выводится заголовок, который является ссылкой на весь материал, краткий текст, т.е. анонс (хотя можно и весь вывести если надо), информация об авторе (имя, дата публикации). А второй вариант, поля, это когда ты самостоятельно указываешь какие поля тебе выводить. Там больше возможности для настроек. Но пока что начнём с первого варианта.

Рааскрой пункт «row style» (для этого кликни по его значению) и укажи там галочку на «материал»

views_settings

Нажимай «обновить». Тебе будет предложено еще указать кое-какие параметры:

row_style
Если убрать первую галочку, то будет выводиться не тизер (анонс), а полный текст материала. Вторая галочка ответственна за то, показывать ли под материалом список терминов таксономии, с которыми связан этот материал. Вобщем это тебе не принципиально. А третья помоему за то, показывать ли число комментов и ссылку на комментирование. как-то так вобщем.
Оставляй как есть и жми сохранить.

Ниже на этой же странице есть блок «Live preview». После вышеуказанных операций ты там увидишь все своим материалы.

Идём дальше.
Надо указать фильтр материалов т.е. нам не нужны все материалы сайта, а нам нужны только материалы типа «новости». Для этого нажимаем справа от «фильтры» плюсик

views_filters

и в открывшемся списке выбираем по чём будем фильтровать. В нашем случае это «Материал: тип»
add_filter
Жми добавить и потов выбирай из списка тип материала, который хочешь видеть. Ну в моём случае это будут «статьи»

configure_filter

Нажимаем «обновить». Теперь в предпросмотре ты увидишь только вывод нужных тебе материалов. Теперь отсортируем (то, что ты говорила, что надо чтобы в обратном порядке было). Для этого нажимай на плюс в блоке над фильтрами, «Sort Criteria» (у меня на этом проекте старая версия друпаля и поэтому переводы могут не совпадать с теми, что у тебя).
Сортировать будем по «Материал: Post date», т.е. дата создания.
add_sort_criteria

Далее тебе будет предложено задать порядок и детализацию. Второе тебе не принципиально. А вот порядок как раз тебе и нужен.
configure_sorting

Я тут сам всё время путаю мне надо по убыванию или по возрастанию. Поэтому методом тыка всегда делаю. Поставь одно, нажми «обновить» и посмотри в live preview что получилось. если не так, то нажми на этот фильтр и поменяй порядок.

Вот примерно, что сейчас у тебя должно быть:

views

Но ето мы задали параметры для дефолтного вывода этого представления, а нужна страница. Да, у одного views’а может быть несколько представлений. Это очень удобно. Но тебе пока что нужна просто страница.

Для её создания в блоке слева в выпадающем списке выбери «страница»

views_add_page

и нажми кнопку ниже «Add display». У тебя слева появится еще одна как бы закладочка «страница»
views_page_warning

Как видишь внизу выдаётся сообщение, что для страницы должен быть указан путь, а он у нас не задан. Всё правильно. В блоке «page settings» нажми на значение пункта «путь» и укажи там адрес, по которому ты хочешь попадать на эту твою страницу:

views_page_path

Нажимай «обновить» и затем ниже кнопку «сохранить». Теперь можешь открывать свою новую страницу по указанному тобой там адресу.

После того как это сделаешь рекомендую посмотреть там уже готовые views’ы. Они как бы дефолтом сразу есть, но на странице списка представлений они серенькие. Там можно нажать их включение и потом зайти в них и посмотреть что так и как.
А после этого всего перечитай еще раз ту статью, что я тебе кидал. После этого всего ты по идее хорошо уловишь суть этого модуля и чтол с ним можно делать. Вобщем настоятельно реконмедую пройтись по этому плану.

Вопросы? )

tags: , ,
posted in drupal by yas375

Follow comments via the RSS Feed | Оставить комментарий | Trackback URL

20 Comments to "Азы работы с модулем views в drupal"

  1. Антон wrote:

    Спасибо!) кажется, я начал понимать что к чему)

  2. cheesotochka wrote:

    Может для нуба и интересно, а так ни слова определенного как определенно все что тут написано в этом виде не подскажет новичку нет алгоритма и примеров

  3. di wrote:

    Скажите пожалуйста,

    а если мне нужен вывод по полям но чтобы выводились анонсы новостей. как лучше реализовать? Создавать поле анонса (то как его привязать к ссылке подробнее?), либо есть еще варианты?

  4. yas wrote:

    для этих целей два варианта:

    1. В настройках вашего представляния в пункте «Raw style» установите значение «материал» и после этого вам будет предложено указать как показывать материал (полностью или только тизер).

    2 .Или же вы можете использовать в упомянтом выше поле значение «поля» и тогда в блоке настрое «Поля» добавьте поле «Материал: анонс» (ну или может называться «Материал: краткое содержимое»).

    Касательно того, что вам это надо связать с материалом вашим так я тут не совсем понял что имеет ввиду. Если делать по первому способу как я тут описал, то ссылка на полный материал сама собой будет. Если же использовать поля, то есть три варианта:

    а) добавить поле «Ссылка на материал». При его добавлении можно будет указать текст ссылки

    б) При добавлении многих полей в их настройках есть пункт «Связать это поле с его материалом». Это собственно и означает, что надо сделать это поле ссылкой на материал. Для заголовков точно такая опция есть, а вот для анонса я не уверен и поэтому ниже привожу еще третий вариант

    в) Предположим мы хотим сделать, чтобы весь текст анонса был одной ссылкой на полный текст. В настройках любого поля (в том числе и тизера) есть опция типа «Выводить это поле в виде ссылки». Когда поставим галочку, то появится еще ряд полей, первым из которых является поле пути, т.е. куда ссылаться ссылке. Нам тут надо, чтобы было что-то типа node/12. Если для страницы с таким адресом есть синоним, то при выводе именно синоним и будет выведен. Но нам надо, чтобы номер ноды подставлялся в адрес ссылки автоматически. Это просто. Добавляем еще одно поле: id материала (nid). Для него ставим галочку «скрывать из вывода», чтобы оно не показывалось. После этого изменяем порядок следования полей так, чтобы наш nid был выше поля анонса. Ну и теперь когда мы снова попытемся отредактировать адрес пути ссылки, то там мы уже можем использовать наш nid. Указываем там адрес ссылки: `node/[nid]` (без кавычек). Ну и есть еще один нюанс. У нас в тексте анонса может быть html. И когда мы обрамим это дело в ссылку, то может получиться бяка. Поэтому нам надо сперва поле анонс очистить от html. Делается это тоже легко. В настройках поля анонса ставим галочку «Установить для этого поля максимальную длину». Появится ещё несколько настроек. Среди них надо отметить опцию «Удалить HTML-теги.»

    Ну вот вроде и всё)

  5. Александр wrote:

    Создаю тип вида – блок. Табличное представление.
    Мне нужно, чтобы чтобы среди прочих полей отображалось поле [teaser]. Всё отображается кроме тизера.
    Если страница, то всё нормально.
    Это что, запрет на показ тизера в блоке и его не обойти?
    Подскажите, что можно сделать?

  6. yas wrote:

    подобных ограничений нет. проверь, что у тебя в настройке поля «Материал: аннотация» не стоит галочка «Исключить из вывода».

    А так же проверь, что у тебя сам по себе тизер есть. Напрямую в базе данных проверь

  7. Александр wrote:

    Проблема решена путем удаления созданного блока и создания его вновь в точности, как первый раз. Всё стало работать как надо.
    Похоже был сбой.

  8. QQ wrote:

    спасибо за статю – хоть что-то начал понимать)
    только вот указываю адрес страницы, на которой необходим вывод материала, а он не цепляется(
    как быть? Спасибо.
    и еще вопрос как сделать такой же вывод как в админке друпала? (при нажатии на пункт,например, администрирование – выводятся все пункты меню с вложенными в них пунктами, на странице)

  9. QQ wrote:

    точнее он цепляется, но изменений никаких нет(

  10. yas wrote:

    плохо понимаю что значит «не цепляется». скрин покажи где цепляешь и объясни понятнее.

    Если ты про сам контент страницы «/admin», то помоему там используется отдельная функция. Можно покапать и найти её (по hook_menu определяешь из какого файла что отрабатывает по заходу в админке, а потом уже там смотришь детали). Или же что-то подобное можно сделать через views.

    А если ты про саму менюшку слева развёрнутую, то это обычное поведение меню: когда находишься в самом глубоком уровне, то до него меню раскрывается. Плюс можно специально указать для разделом меню, чтобы они раскрывались. Будет пункт называться типа «expand» (развернуть, развёрнуто), как-то так вобщем.

  11. yas wrote:

    кстати если под тем, что ты «цепляешь, а он не цепляется», то если ты имеешь ввиду, что ты во views создал страницу и указал для неё адрес, а она по этому адресу недоступна, то у меня вот есть предположение, что ты просто не сохранил весь view.

  12. QQ wrote:

    попробую изъясниться яснее – в настройках вьювса делаю страницу, в ней выставляю url, нажимаю сохранить, но на странице по этому url ничего не меняется
    вот скриншоты:
    http://picasaweb.google.ru/Khatkevich/qeSppG#5512187658187188274

  13. yas wrote:

    так а в превью вьюса там что-то отображается? может просто по твоим критериям нету подходящего контента? потому как делаешь ты вроде всё правильно.

    Ну и на всякий случай проверь, что у тебя нету какой-нибудь страницы с таким же адресом-синонимом. Как вараинт в этой своей вьюхе просто сам впиши какой-нить текст вверх или вниз и убедись, что он отображается на этой странице. Если да, то значит просто нету материалов, удовлетворяющим твоим условиям во views. Если нет, то надо копать в сторону адресов.

    Кстати так же проверь, что у тебя используются старндартные шаблоны views, а не переопрделённые. А то может ты положил пустой файл-шаблона…

  14. Stella wrote:

    Доброй ночи! Помогите, если можете с такой ситуацией: у меня есть список специальностей, в каждой специальности есть предметы, один предмет может относиться к нескольким специальностям и каждая специальность содержит несколько предметов. Я создала словарь «Специальность» и словарь «Предметы». Когда вывожу список специальностей, проблем нет. Но когда нажимаю на специальность, то выдаются все предметы, которые есть в словаре, а мне нужны только те, которые относятся к специальности. Как мне надо поступить для того, чтобы выдавался список нужных предметов?

  15. yas wrote:

    если у вас и предметы и специальности – это словари таксономии, то я не совсем понимаю как же вы связываете предмет со специальностью…
    Я бы наверное делал так:

    вариант 1: специальности – это термины таксономии (похоже, что у вас сейчас так и есть), а вот предметы – это ноды, для которых вы указываете специальности как термины таксономии (можно через стандартный друпалевский функционал, а можно и через cck, смотря по ситуации)

    вариант 2. наоборот: специлаьности – ноды, а предметы – таксономии.

    Какие из этих двух методов воспользоваться – надо смотреть по ситуации

  16. Stella wrote:

    Спасибо за ответ! Я попробую.

  17. Вики wrote:

    Вопрос новичка. Как сделать так, чтобы поле фильтра было не пустым, а содержало варианты выбора, автоматически получаемые из значения полей? Возможно ли это какими-то стандартными настройками или нужно чего-то дописывать?

  18. yas wrote:

    ну собственно по настройкам фильтров во views внимательнее полазьте. можно там сделать селект с выбором из списка.
    Вот пример: http://arf.by/eventsarchives

  19. mr_Vast wrote:

    Во Views есть пункт списка анонсов. На сайте нажимая на анонс, статья показывается полностью. Поля комментарии и комментаторы в редакторе статьи заполнены, но не отображаются когда статья полностью развернута. Во Views можно добавить поля комментарии и комментаторы, тогда в анонсах они отображаются. Надо что бы в анонсе их не было, а в развернутой статье они были.

  20. Николай wrote:

    Здравствуйте!
    Довольно познавательная статья для новичка.
    Я немного разбираюсь во views, но недавно столкнулся с одинм вопросом. Можно ли сделать чистые урл для постраничного вывода views? Т.е views выводить первые 10 материалов на страницу с путем http://site.com/view.html
    а все остальные на страницы
    http://site.com/view.html?page=1,2,3 и т.д.
    Надо чтобы было что-то вида

    http://site.com/view.html/1
    http://site.com/view.html/2
    http://site.com/view.html/3
    т.е. без вопроса с параметром.

Leave Your Comment