| Осваиваю Drupal Views. |
Срд, 26 Май 2010 11:30 |
|
В своё время озаботился получением опыта в LAMP-разработке (P=PHP, Perl) и в нынешнее кризисное время это помогло мне не остаться без работы. Несмотря на то, что мне нравится разрабатывать информационные системы и писать клиент-серверное ПО на C в GNU/Linux (а в перспективе хочется вообще в ядро "погрузиться"), сейчас "для поддержки штанов" приходится лабать сайты в контексте Drupal. С самим программированием проблем, разумеется, не возникает, но в рамках этой системы хочется обходиться без программирования, средствами самой этой системы.
И вот здесь у меня возникла проблема. Есть довольно распространённая (как я понял, погуглив) задача выдачи rss-потоков с сайта по типам материалов и однажды эта задача поставилась и передо мной. Опять же, погуглив и почитав литературу, пришёл к выводу, что обычно она решается через использование типа дисплея Feed во Views. Не мудрствуя лукаво, я так и сделал: настроил фильтры, сортировку, указал путь (скажем, "/typerss.xml") и т.д. В результате, в Live Preview внизу страницы с моим view дисплей Feed нужные мне данные, как раз по типу, показывает. Однако когда пытаюсь посмотреть фид по урлу (http://сайт/typerss.xml), то получаю "Запрашиваемая страница не найдена". Тут я завис. Продолжил полировать гугл и литературу, но безрезультатно.
В конечном счёте, отпущенное на реализацию время стало уже поджимать, поэтому пришлось решать "ломиком". Поскольку у меня типы содержимого регистрируются моими же модулями, то счёл логичным добавить в эти же модули как экспорт пути, так и callback для этого пути. Разместил в hook_menu() среди прочего такое:
<?php $items['typerss.xml'] = array (
'title' => t('RSS-поток новостей type'),
'type' => MENU_CALLBACK,
'page callback' => 'typerss_page',
'access callback' => TRUE
); ?>
в callback такое:
<?php $dbResult = db_query("SELECT nid FROM node WHERE type=\"type\" AND status=1 AND promote=1
ORDER BY created DESC LIMIT 20");
if (0 < mysql_num_rows($dbResult)) {
$nids = array();
while ($data = db_fetch_array($dbResult)) {
$nids[] = $data['nid'];
}
}
node_feed($nids); ?>
Однако ничего не изменилось. Пробовал и обновлять admin/build/modules, и переустанавливать модуль с полным удалением, и добавлять в module.install вызов menu_rebuild() - всё бесполезно, страница не найдена и всё, новый путь не добавляется.
Плюнул, залез в мускл и руками сказал такое:
INSERT INTO menu_router VALUES ("typerss.xml","","",1,"a:0:{}","typerss_page","a:0:{}",1,1,"","typerss.xml","RSS-поток новостей type","t","",4,"","","",0,"");
После этого сразу заработало как надо. Если кто подскажет как это сделать изящнее, без программирования и лазания в БД руками - буду признателен.
P.S. Моя тема о том же на drupal.ru висит без ответа.
P.P.S. Прошу не обсуждать тут кризис, его последствия и кто как выкручивается. Пожалуйста, только по существу.
|
|
|