Здравствуйте
У меня есть тип контента, называется: myarticles
1. Как сделать так, чтобы эти статьи показывались в url отдельной папки. Например http://mysite/myarticles/ТутНазваниеАртикла или так:
http://mysite/myarticles/?id=ТутIDАртикла
2. Как сделать, чтобы контент помещать как блоки? Например, для отображения одновременно двух видов контентов (двух блоков)на одной странице?
Комментарии
Для того, чтобы страница определенного типа контента могла реагировать на такие вот адреса, нужно, чтобы такой адрес был явно задан в пути данной страницы.
А для того, чтобы автоматизировать задание этих адресов, используются модули token, pathauto и transliteration
Более подробно об этом - здесь
http://rtfm.2gogo.ru/drupal-7-chistye-ssylki-pathauto-token-transliterat...
Можно создать блок и в этот блок вставлять произвольный php-код.
http://www.sooource.net/vstavit-php-kod-v-blok-drupal
А вывод содержимого определенной ноды можно сделать так.
...
render $nd->field_f1['ru'][0]['value'];
Более подробно это рассматривали здесь
http://www.drupal.ru/node/60346
Если возникают вопросы, какие данные вообще хранятся в возвращаемой $nd, то подключить модуль devel и воспользоваться функцией
Большое спасибо!
Установил pathauto, теперь ссылки на контент моего типа формируются верно: http://site/mycontent/title-2
Подскажите, пожалуйста, как сделать, чтобы на странице http://site/mycontent/ отображался список всех статей типа mycontent???
Создал ссылку на эту страницу, естественно пишет: The requested page "/mycontent/" could not be found.
Думаю, самый быстрый и простой способ - воспользоваться модулем views, создать новый views(представление), в нём сформировать список того, что будет выводиться (в Вашем случае, все опубликованные узлы типа mycontent, отсортированные по какому-либо параметру) и задать у этого представления адрес mycontent.
А на "низком уровне" это делается с помощью hook_menu.
Можете, пожалуйста, подсказать про hook_menu:
В своем модуле под названием first прописал:
<?php
// скопировал из node_menu
function first_menu(){
$items['node'] = array(
'page callback' => 'first_articles_list',
'access arguments' => array('access content'),
'menu_name' => 'navigation',
'type' => MENU_CALLBACK,
);
return $items;
}
?>
При стирание кеша код заходит в данную функцию.
Но при открытии страницы /articles, код в этой же функции не выполняется:
<?php
function first_articles_list(){
return "WHAT THE HEAVEN!!!";
}
?>
Почему не вызывается функция first_articles_list()?
Тут название этого хука немного запутывает.
Это не столько "новый элемент в меню", сколько определение новой ссылки на сайте, при переходе на которую будет что-то делаться.
То есть, Вам нужно писать не $items['node'], а в Вашем случае, $items['articles'] - в этом случае будет заявлено, что если пользователь перейдет по адресу site.ru/articles, будет что-то происходить (что конкретно - это описываете в данном элементе массива)
Вот некоторые материалы по использованию hook_menu
http://content-management-systems.info/drupal/video/5657
http://poleshuk.ru/xuk-menyu-v-drupal-hook_menu/
http://site-made.ru/drupal/hookmenu-drupal-sozdanie-stranic-cherez-modul
Но в Вашем случае, думаю, проще будет сделать это через views - там список выводимых нод и ссылку articles можно будет задать автоматически. А формат вывода можно потом спокойно настроить и темизировать.
А нет, работает! ) Надо было писать не $items['node'], а $items['articles']
Скажите, пожалуйста, а как при подобном создании страниц сохранить расположение блоков? Т.е. мне нужно, например, в страницу articles сформировать только контент, а остальные блоки чтобы остались так, как я определил в admin/structure/block
По идее, в настройках блока можно указать, где его отображать, а где - не отображать.
Поэкспериментируйте с этим.
Спасибо большое за ссылки на материал, уже читаю.
Модуль view обязательно буду использовать, но сначала хотелос бы понять, как механизм работает "изнутри".
Прохожу код отладчиком, если Вы знаете, то можете подсказать, как сайт понимает, что html возвращаемый функцией first_articles_list() (в примере выше) необходимо поместить именно в блок content, а не в, например, блок "menu"? Можно ли это переопределить?
Если что, есть очень хорошая книга по Drupal 7, стоит порядка 1000 рублей
http://www.drupal.ru/node/66168
Я предполагаю, что данный код и будет по умолчанию помещаться в блок $content.
А переопределить это, думаю, можно при разработке своей темы - там есть множество хуков, выполняемых на разных этапах формирования страниц.
Вот, к примеру, хорошая подборка материалов, показывающих возможности темизации
http://xandeadx.ru/blog/tags/theming
Скажу больше. Знание темизации позволит натянуть на Drupal практически любую верстку.
Большое спасибо!