Не так давно разрабатывал сайт для одной гос конторы. Не скажу что в нем было что то особо трудное, но использование Views зашкаливало. Views поистине монструозен. Поэтому сегодня мы вернемся к нему, но урок будет более практический, чем теоретический. Мы рассмотрим использование такой полезной штуки как Exposed Filter, и слегка пощупаем Arguments, они с небольшой помощью модуля Views bonus сделают возможным скачку материалов в формате DOC (вообще их несколько на выбор).
Приступим -) У нас свежайщая подборка, Drupal 6.13, CCK 6.x-2.5, Date 6.x-2.3, Views 6.x-2.6, Views Bonus Pack 6.x-1.0-beta4. Если какого то модуля у вас нет, идем на Drupal.org и скачиваем его. Установку модулей мы уже проходили, нам нужны следующие:
CCK
Content
Option Widgets
Date/Time
Date
Date API
Date Timezone
Views
Bonus: Views Export
Views
Views UI
Включаем их.
Теперь создайте словарь таксономии, сделайте его обязательным для типа данных page, и закиньте туда пару терминов.Так же создайте несколько материалов типа page. Идем в «Administer › Site building › Views» и создаем новый Views c «View type: Node». Добавляем в новый вид 3 поля (должен же вид что то показывать), Node: Title, Node: Post date, Node: Teaser. У поля Node: Title устанавливаем галочку «Link this field to its node».

Теперь давайте добавим парочку Exposed Filter. Разница у Exposed с обычными только в том, что пользователь может менять Exposed, тем самым сортируя материалы. Сначала давайте добавим фильтр Date: Date (node).

В настройках укажем что сортировка будет происходить по Node: Post date

В следующей вкладке поставим что нужно найти все даты между 2 указанными значениями (Operator: is between), Date default: now- 5 year, To date default: now+ 5 year (2 этих значения указывают, что сначала отобразятся материалы у которых дата публикации лежит в десятилетнем промежутке, центр которого — сегодня). Теперь нажимаем кнопку Expose,

появится несколько новых полей доступных для изменения.

Из них, нас интересует «Label», заменим на «Дата публикации». Так же интересна галочка Unlock operator, если кликнем по ней, и сохраним, кроме даты, пользователь сможет изменить и поле Operator, но нам это не нужно (во всяком случае пока). Сохраняем фильтр.
Так же добавим фильтр Node: Title, в настройках поставим Contains (будет выводить все материалы, в заголовках которых есть введенный текст), уберем галочку Case sensitive, чтоб не было разницы в РеГиСтРЕ букв, и нажмем Expose. Label поставим «Поиск в заголовке».

И последний фильтр - Taxonomy: Term. В настройках укажем созданный нами словарь (я поэтично, и с большой фантазией, назвал его «qwe»). Selection type: Dropdown, то есть будет выпадающий список, если выбрать Autocomplete, то термины нужно будет вводить самому, и они будут авто дополняться. Show hierarchy in dropdown — если словарик имеет иерархию, то это отобразится в выпадающем меню.


Тут я изменил только Label, но при желании можете поиграть с настройками. Сохраняем фильтр, и вид в целом.
Теперь давайте добавим дисплей Page.

Зададим какой-нибудь Path, еще раз сохраним весь вид, и перейдем по вбитому пути.

У меня получилось так:

по моему неплохо)
С первой задачей разобрались, займемся второй. Зайдем в созданный нами вид, и добавим дисплей типа Feed. Style поменяем на DOC file.

Изменим Path на «doc/%» (% - это то место куда будет подставляться аргумент)

теперь нужно дать Друпалу нужный аргумент, для наших елей подойдет Node: Nid, то есть, идентификационный номер материала.

Нажмем Override (мы ведь не хотим добавить аргумент во все дисплеи?), и сохраним.
Уже должно работать, зайдем по адресу ваш_сайт/doc/id_существующего_материала, должна начать закачка doc файла) а внутри у нас...
Fatal error: Call to undefined method views_bonus_plugin_style_export_doc::sanitize_columns() in /var/www/drupal6/sites/all/modules/views/theme/theme.inc on line 290
Неожиданно не правда ли? Честно говоря не припоминаю что создавал такую ноду... Если порыскать по Drupal org, то окажется что не я один создал материал подобного вида. Если у вас не появилась эта ошибка, значит вам повезло, если же появилась, то скачиваем этот файлик. Внутри папка «export», которой нужно заменить папку с аналогичным названием в модуле Views bonus (Кстати, в DEV версии модуля такой ошибки уже нет, так что скоро поправят и в этой). Пробуем еще раз зайти по адресу ваш_сайт/doc/id_существующего_материала (главное Nid поставьте правильный, я по ошибке вбил Nid несуществующего материала, и пол часа искал почему ничего не отображается). В итоге получим желаемое:

Мммм... ничего не забыли?) Что бы не вставлять ссылку каждый раз вручную, давайте чуть чуть подправим тему (Это не совсем правильный подход, и чуть позже будет урок по темизации Drupal, но на первый раз сойдет). Зайдите в папку с вашей темой (у меня стандартная тема Garland, она находится в папке ваш_сайт/Themes/Garland), тут нас интересует файлик node.tpl.php (он отвечает за отображение материалов). Внутренности его выглядят так:
<?php
// $Id: node.tpl.php,v 1.5 2007/10/11 09:51:29 goba Exp $
?>
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?>"><?php print $picture ?>
<?php if ($page == 0): ?>
<h2><a title="<?php print $title ?>" href="<?php print $node_url ?>"><?php print $title ?></a></h2>
<?php endif; ?>
<?php if ($submitted): ?>
<span class="submitted"><?php print $submitted; ?></span>
<?php endif; ?>
<div class="content clear-block"><?php print $content ?></div>
<div class="clear-block">
<div class="meta"><?php if ($taxonomy): ?>
<div class="terms"><?php print $terms ?></div>
<?php endif;?></div>
<?php if ($links): ?>
<div class="links"><?php print $links; ?></div>
<?php endif; ?></div>
</div>
Как видите это обычный HTML файл, со вставками PHP, Добавим нашу ссылку
<?php
// $Id: node.tpl.php,v 1.5 2007/10/11 09:51:29 goba Exp $
?>
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?>"><?php print $picture ?>
<?php if ($page == 0): ?>
<h2><a title="<?php print $title ?>" href="<?php print $node_url ?>"><?php print $title ?></a></h2>
<?php endif; ?>
<?php if ($submitted): ?>
<span class="submitted"><?php print $submitted; ?></span>
<?php endif; ?>
<div class="content clear-block"><?php print $content ?></div>
<div class="clear-block">
<div class="meta"><?php if ($taxonomy): ?>
<div class="terms"><?php print $terms ?></div>
<?php endif;?></div>
<?php if ($page): ?>
<a href="<?php print "http://localhost/drupal6/doc/".$nid ?>">скачать в Doc</a>
<?php endif; ?>
<?php if ($links): ?>
<div class="links"><?php print $links; ?></div>
<?php endif; ?></div>
</div>
Если быть точным, то я добавил
<?php if ($page): ?>
<a href="<?php print "http://localhost/drupal6/doc/".$nid ?>">скачать в Doc</a>
<?php endif; ?>
Сначала идет проверка «if ($page)», то есть, если страница отображается полностью, то печатаем ссылку, далее идет сама ссылка «<a href="<?php print "http://localhost/drupal6/doc/".$nid ?>">скачать в Doc</a>», здесь $nid — эта идентификационный номер, у вас это будет выглядеть как «<a href="<?php print "ВАШ_САЙТ/doc/".$nid ?>">скачать в Doc</a>».
На этом урок закончен. Старался расписать все понятнее, если что не серчайте)

Комментарии
Здравствуйте! А как узнать ID
By Dimedrol on 09 Авг 2009 at about 12:17.Здравствуйте!
А как узнать ID документа? Что это вообще?
Огромное спасибо за уроки!!! Как хорошо, что есть люди, у которых есть время вот так поделиться опытом с новичками! =)))))
Если вы не включали на сайте
By RemaGe on 09 Авг 2009 at about 12:35.Если вы не включали на сайте модуль Pathauto (jон меняет адрес статьи), то id можно узнать по адресу материала, зайдите в материал, ссылка должна быть вида ВАШ_САЙТ/node/5, 5 - это и есть id материала. Если модуль Pathauto включен, то нужно зайти на страницу ВАШ_САЙТ/admin/build/path, где есть все синонимы созданные модулем, и найти нужный адрес с id.
Id - это уникальный номер записи в базе данных, по нему всегда можно отличить одну запись, от другой. В Drupal так же отличаются и названия id, например id материалов называется nid (node id), а id пользователей uid (user id).
Незачто) я начал учить друпал 3 месяца назад, и столкнулся с нехваткой материалов для новичков, поэтому пытаюсь описать, то в чем смог разобраться сам -)
RemaGe, где Вы были год
By Александр Стаховский (не проверено) on 09 Авг 2009 at about 13:43.RemaGe, где Вы были год назад? :)
Тогда как раз мне нужно было, сейчас многое уже знаю, только мало с аргументами работаю.
Год назад я был офисным
By RemaGe on 09 Авг 2009 at about 13:49.Год назад я был офисным планктоном, и перекладывал бумажки-)
RemaGe, жаль, но теперь будут
By Александр Стаховский (не проверено) on 09 Авг 2009 at about 14:39.RemaGe, жаль, но теперь будут интересные посты про Друпал?
Буду следить за Вами.
Посты будут. Интересные ли -
By RemaGe on 09 Авг 2009 at about 14:41.Посты будут. Интересные ли - не уверен, но буду стараться)
присоединяюсь!RemaGe, где Вы
By tostik (не проверено) on 15 Авг 2009 at about 10:41.присоединяюсь!RemaGe, где Вы были год назад? :)
блин стока времени сэкономили б!
Супер все так лаконично
By abix on 16 Авг 2009 at about 21:50.Супер все так лаконично описано, вопросов почти не остается. =) Только начинаю разбиратся с друпалом и ваш блог очень даже кстати.! =)
Рад помочь -)
By RemaGe on 17 Авг 2009 at about 03:29.Рад помочь -)
Здравствуйте, У меня есть
By Студент (не проверено) on 19 Авг 2009 at about 22:02.Здравствуйте,
У меня есть вопрос, но он малость не в тему. Вопрос связан с модулем Apache Solr. При входе в Управление возникает ошибка: Fatal error: require_once() [function.require]: Failed opening required 'SolrPhpClient/Apache/Solr/Service.php' (include_path='.;D:\WebServers\xampp\php\pear\') in D:\WebServers\xampp\htdocs\drupal\modules\apachesolr\Drupal_Apache_Solr_Service.php on line 2
На этой строке написано:
require_once 'SolrPhpClient/Apache/Solr/Service.php';
Помогите пожайлуста.
а вы сам модуль
By RemaGe on 20 Авг 2009 at about 03:02.а вы сам модуль solr-php-client с скачивали?
Честно говоря я и не знал что
By Студент (не проверено) on 20 Авг 2009 at about 09:29.Честно говоря я и не знал что его нужно скачивать, может вы подскажите куда его пихать?
Разорхивируйте в папку с
By RemaGe on 20 Авг 2009 at about 13:26.Разорхивируйте в папку с модулем то есть путь должен быть такой sites/all/modules/apachesolr/SolrPhpClient
Большое спасибо.
By Студент (не проверено) on 20 Авг 2009 at about 18:15.Большое спасибо.
И снова здравствуйте! В уроке
By Dimedrol on 20 Авг 2009 at about 21:37.И снова здравствуйте!
В уроке №9 нельзя писать комментарии, почему то... Поэтому пишу сюда.
У меня 2 вопроса.
Первый: у меня есть тема, которую я хочу поменять. А именно там нет такого как "Левая колонка" и "Правая колонка", есть "сайдбар". Он находится справа(на месте правой колонки). Мне хочется его перенести на место левой колонки. Код, который отвечает за этот регион в page.tlp.php такой
<?phpif ($sidebar) :
?>
<?phpprint $sidebar;
?>
<?phpendif;
?>
Все мои попытки "потаскать" этот код по телу page.tlp.php закончились тем, что сайдбар перемещался вертикально по правой стороне сайта.
Собственно вопрос, как переместить этот сайдбар налево??? ))))
Второй:
Мне совершенно не нужны поля слева и справа страницы, можно ли как-нибудь "растянуть" содержимое страницы???
Спасибо!
Сайдбар - это и есть колонка,
By RemaGe on 21 Авг 2009 at about 02:06.Сайдбар - это и есть колонка, основные характеристики вбиты в файле style.css. Поля убрать можно, это задается там же. Ищите нужные вам элементы по их id.
скажите, можно создать вид
By Резидент (не проверено) on 24 Авг 2009 at about 14:22.скажите, можно создать вид для главной страницы?
Да, более того, при
By RemaGe on 24 Авг 2009 at about 15:06.Да, более того, при установке Views он создается автоматом (не активирован) и называется frontpage, но не обязательно использовать его, вы можете сделать любой страничный вид главной страницей, какую страницу считать главной, можно задать тут Administer › Site configuration, параметр Default front page:
Здравствуйте, Женя! Вот эту
By Ирина (не проверено) on 18 Сен 2009 at about 00:27.Здравствуйте, Женя! Вот эту статью я очень внимательно прочитала, спасибо большое. Посмотрела, как много легкоизложенного материала у Вас на сайте. Вы делаете очень большое дело! Новичкам так не хватает такой информации. Когда заходишь на форум, могут и проигнорировать :) или :(. А здесь очень много ответов на вопросы. Но, к сожалению, даже почитав про фильтры, я так и не смогла разобраться со своей проблемой. Подозреваю, что я упускаю что-то очень важное... Одним словом, я решила рискнуть и поделиться. Если у вас будет минуточка, поделитесь, пожалуйста. что Вы думаете об этом.
Представьте себе расписание учебы врачей:
М.И. учится с 1-го по 10 сентября,
Д.В. с 10 по 20 октября,
С.Н. - с 20 по 30 ноября.
Нужно сделать фильтр, который покажет врача, совершенно свободного в искомый период времени.
Я создала тип материала: "Врачи". Там есть поле "Учеба" (два окошка - для ввода даты начала занятий и даты окончания).
Далее мне нужно сделать фильтр.
Во views выбираю фильтр по типу материала... это понятно...
Затем "Дата (нода)" - добавить, кликаю нужное в "Date form type" и "Granularity".
В "Date field(s)" выбираю оба поля: "Учеба from date" и "to date".
..."Method"
С ним, если честно не очень понятно, но методом проб и ошибок я поняла, что для моего случая подходит "AND"".
Потом выбираю оператора "is not between". Ведь мне нужно найти все, что не относится к указанному периоду времени.
"Absolute value" и "Relative value" оставляю пустыми, и жму обновить.
Что происходит дальше.
Возьмем для примера М.И.
Ура! Ее не находят, если в поиске указать даты:
в поле "from" - с 1,2,3 и т.д. до 9 сент.(я перебрала все) в поле "to" постоянно стоит 10 сент.
И, увы, все ломается, если указать, промежуток, например, с 3-го сент. по 7 сент. :((
Вы не знаете, почему? Что я не так делаю?
Буду очень-очень благодарна за помощь.
Все ломается если указать to
By RemaGe on 18 Сен 2009 at about 16:34.Все ломается если указать to отличным от 10? А каким образом все ломается?
Вы знаете, Женя, работает,
By Ирина (не проверено) on 18 Сен 2009 at about 22:29.Вы знаете, Женя, работает, когда указаны пограничные даты или меняется только дата "from".
Не работает, когда указываю даты из промежутка: например, с 3-го по 5 сентября.
Не понимаю, почему...
Просто не работает, то есть
By RemaGe on 19 Сен 2009 at about 14:38.Просто не работает, то есть ничего не отображает, или выдает какую то ошибку (неплохо бы скриншот)?
Начал разбираться с Drupal
By Руслан (не проверено) on 24 Сен 2009 at about 10:02.Начал разбираться с Drupal 6.
Знания php, html, css = 0. :(
Но, вроде, основные вещи понятны (хотя и не с первого/десятого раза).
Сейчас методом чтения манов и прочего полезного, делаю сайт на подобии lenta.ru или gazeta.uz
Разобрался как с помощью pathauto сделать путь к статье ().
Но, не понимаю, как сделать так, чтоб если ввести просто и увидеть все новости за 9 число.
Например в lenta.ru это работает.
Будьте добры, укажите верный путь.
Очень надеюсь обойтись модулями (готовыми).
Я понял что надо ковырять views и аргументы.
Уже 3 дня мучаюсь и не получается.
Очень надеюсь на Вашу помощь.
В прошлом уроке по views было
By RemaGe on 24 Сен 2009 at about 17:10.В прошлом уроке по views было примерно то что вам нужно http://remage.su/content/drupal-urok-chetvertyi-razbiraemsya-s-modulem-v... , в 3 примере там описывается работа модуля calendar, и как раз фильтрация по датам, посмотрите, почитайте, думаю найдете пищу для размышлений -)
Здравствуйте! Спасибо за
By apmyp (не проверено) on 05 Окт 2009 at about 12:10.Здравствуйте! Спасибо за понятный язык уроков. Въезшаешь сразу.
Может и не в тему, но буду благодарен за ответ.
У вас в уроке выводятся материалы (ноды?):
Кислород
драма, Россия
Режиссер: Иван Вырыпаев
и так далее.
Как можно настроить, чтобы при создании материала драма, и Иван Вырыпаев были элементами таксономии и выбирались из словаря (как это делается в обычном типе материалов заметка), но выводились в тексте материала, а не после материала, перечислением через запятую.
Excuse me и delete если не туда и не то пишу.
Вам в 9 урок, это можно
By RemaGe on 05 Окт 2009 at about 14:46.Вам в 9 урок, это можно сделать с помощью темизирования.
Здравствуйте! Довольно давно
By Александр (не проверено) on 21 Окт 2009 at about 00:17.Здравствуйте!
Довольно давно заметил ваш блог о друпале. Это замечательно что кто то просто так, от души помогает другим людям. Спасибо Вам!
У меня собственно вопрос, не совсем по содержанию, но относящийся ко views.
Есть созданный CCK-ем тип контента, поля title, body, contact(контактная информация о человеке). Так вот, в поле contact храниться текст обрамленный некоторым html оформлением. Но при выводе этого поля вьюсом, он заменяет все "<" ">" скобы спецсимволами. Т.е. вьюс применяет внутренний фильтр. Вопрос: Как отлючить этот фильтр?
Best regards.
Заранее благодарю.
Незачто) Вы используете
By RemaGe on 21 Окт 2009 at about 01:59.Незачто)
Вы используете wysiwyg редактор наподобии fckeditor для редактирования contact? Если да, то проблемма в нем.
Если нет, то все фильтры применяемые Друпал к тексту, можно изменить в Форматах ввода (ниже полей материала, на странице добавления), по умолчанию там стоит FilteredHTML, можете поставить FullHTML, или как вариант попробовать создать свой формат ввода, в админке на странице "форматы ввода".
Здравствуйте, можете
By Дмитрий (не проверено) on 05 Ноя 2009 at about 22:28.Здравствуйте, можете подсказать как сделать чтоб каждый материал который я создаю и вывожу через Views ссылался на разные ресурсы
На какие ресурсы?
By RemaGe on 06 Ноя 2009 at about 03:26.На какие ресурсы?
допустим я задаю с помощью
By Дмитрий (не проверено) on 07 Ноя 2009 at about 04:06.допустим я задаю с помощью views вывод картинки, так мне надо чтоб картинка была ссылкой на другой материал, причём каждая картинка ссылка на другой материал
Если ссылки на свои же ноды,
By RemaGe on 07 Ноя 2009 at about 05:25.Если ссылки на свои же ноды, то можете добавить поле CCK Node Reference, если на другие страницы, поле CCK со ссылкой, останется темизировать вывод, и правильно подставить ссылку.
Автор, а у вас никто статьи
By Руслан Соколов (не проверено) on 06 Ноя 2009 at about 21:31.Автор, а у вас никто статьи не тырит с сайта? А то у меня заколебали уже - копируют и копируют. И главное, что ссылку никто не удосужится поставить.
Пока пронесло) Во всяком
By RemaGe on 07 Ноя 2009 at about 05:17.Пока пронесло) Во всяком случае по Друпалу не воруют, пару переводов брали, но ссылку поставили
я добавил поле Node reference
By Дмитрий (не проверено) on 07 Ноя 2009 at about 17:12.я добавил поле Node reference но когда начинаю настройки выставлять выскакивает ошибка
The default value PHP code returned an incorrect value.
Expected format:
return array(
0 => array('nid' => value for nid),
// You'll usually want to stop here. Provide more values
// if you want your 'default value' to be multi-valued:
1 => array('nid' => value for nid),
2 => ...
);
Returned value:
можете объяснить в чём проблема?
Честно, даже не представляю)
By RemaGe on 07 Ноя 2009 at about 17:26.Честно, даже не представляю) Я работал с Node reference, но у меня все прошло гладко.
Вопрос: "С первой задачей
By Резидент (не проверено) on 07 Ноя 2009 at about 17:32.Вопрос: "С первой задачей разобрались, займемся второй. Зайдем в созданный нами вид, и добавим дисплей типа Feed. Style поменяем на DOC file."
Нет Стиля Doc file, как можно исправить? Спасибо)))
Views Bonus Pack -
By RemaGe on 07 Ноя 2009 at about 17:38.Views Bonus Pack - Установили?
теперь да. спасибо
By Резидент (не проверено) on 07 Ноя 2009 at about 17:51.теперь да. спасибо
может не по теме, но такая
By Резидент (не проверено) on 07 Ноя 2009 at about 18:57.может не по теме, но такая ошибка:
warning: Invalid argument supplied for foreach() in
/www/includes/theme.inc on line 463.
Не знаю как исправить
тему меняли?
By RemaGe on 08 Ноя 2009 at about 03:32.тему меняли?
Тему менял и не раз, какую бы
By Резидент (не проверено) on 08 Ноя 2009 at about 15:35.Тему менял и не раз, какую бы не поставил всегда такая ошибка по несколько раз написана.
А тема, которую я создал по уроку отображается не так как тут, а вот так: my_theme
���� ����!!!!
В этом и проблема, темы надо
By RemaGe on 08 Ноя 2009 at about 15:57.В этом и проблема, темы надо писать в кодировке UTF-8, иначе появлюятся ���� ���� и описанные вами ошибки
Спасибо большое, об этом я не
By Резидент (не проверено) on 08 Ноя 2009 at about 17:24.Спасибо большое, об этом я не подумал