Расположение типов контента по папкам и в блоках

Главные вкладки

Аватар пользователя AlexION101 AlexION101 21 марта 2013 в 10:47

Здравствуйте

У меня есть тип контента, называется: myarticles
1. Как сделать так, чтобы эти статьи показывались в url отдельной папки. Например http://mysite/myarticles/ТутНазваниеАртикла или так:
http://mysite/myarticles/?id=ТутIDАртикла
2. Как сделать, чтобы контент помещать как блоки? Например, для отображения одновременно двух видов контентов (двух блоков)на одной странице?

Комментарии

Аватар пользователя roman-yrv roman-yrv 21 марта 2013 в 11:50

"AlexION101" wrote:
1. Как сделать так, чтобы эти статьи показывались в url отдельной папки. Например http://mysite/myarticles/ТутНазваниеАртикла или так:
http://mysite/myarticles/?id=ТутIDАртикла

Для того, чтобы страница определенного типа контента могла реагировать на такие вот адреса, нужно, чтобы такой адрес был явно задан в пути данной страницы.
А для того, чтобы автоматизировать задание этих адресов, используются модули token, pathauto и transliteration
Более подробно об этом - здесь
http://rtfm.2gogo.ru/drupal-7-chistye-ssylki-pathauto-token-transliterat...

"AlexION101" wrote:
2. Как сделать, чтобы контент помещать как блоки? Например, для отображения одновременно двух видов контентов (двух блоков)на одной странице?

Можно создать блок и в этот блок вставлять произвольный php-код.
http://www.sooource.net/vstavit-php-kod-v-blok-drupal

А вывод содержимого определенной ноды можно сделать так.

$nd=node_load($nid);
...
render $nd->field_f1['ru'][0]['value'];

Более подробно это рассматривали здесь
http://www.drupal.ru/node/60346

Если возникают вопросы, какие данные вообще хранятся в возвращаемой $nd, то подключить модуль devel и воспользоваться функцией

kpr($nd);
Аватар пользователя AlexION101 AlexION101 21 марта 2013 в 16:48

Установил pathauto, теперь ссылки на контент моего типа формируются верно: http://site/mycontent/title-2

Подскажите, пожалуйста, как сделать, чтобы на странице http://site/mycontent/ отображался список всех статей типа mycontent???

Создал ссылку на эту страницу, естественно пишет: The requested page "/mycontent/" could not be found.

Аватар пользователя roman-yrv roman-yrv 21 марта 2013 в 17:07

Думаю, самый быстрый и простой способ - воспользоваться модулем views, создать новый views(представление), в нём сформировать список того, что будет выводиться (в Вашем случае, все опубликованные узлы типа mycontent, отсортированные по какому-либо параметру) и задать у этого представления адрес mycontent.

А на "низком уровне" это делается с помощью hook_menu.

Аватар пользователя AlexION101 AlexION101 22 марта 2013 в 17:21

Можете, пожалуйста, подсказать про 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()?

Аватар пользователя roman-yrv roman-yrv 22 марта 2013 в 17:37

Тут название этого хука немного запутывает.
Это не столько "новый элемент в меню", сколько определение новой ссылки на сайте, при переходе на которую будет что-то делаться.

То есть, Вам нужно писать не $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 можно будет задать автоматически. А формат вывода можно потом спокойно настроить и темизировать.

Аватар пользователя AlexION101 AlexION101 22 марта 2013 в 17:33

А нет, работает! ) Надо было писать не $items['node'], а $items['articles']
Скажите, пожалуйста, а как при подобном создании страниц сохранить расположение блоков? Т.е. мне нужно, например, в страницу articles сформировать только контент, а остальные блоки чтобы остались так, как я определил в admin/structure/block

Аватар пользователя roman-yrv roman-yrv 22 марта 2013 в 17:39

По идее, в настройках блока можно указать, где его отображать, а где - не отображать.
Поэкспериментируйте с этим.

Аватар пользователя AlexION101 AlexION101 22 марта 2013 в 18:33

Спасибо большое за ссылки на материал, уже читаю.
Модуль view обязательно буду использовать, но сначала хотелос бы понять, как механизм работает "изнутри".
Прохожу код отладчиком, если Вы знаете, то можете подсказать, как сайт понимает, что html возвращаемый функцией first_articles_list() (в примере выше) необходимо поместить именно в блок content, а не в, например, блок "menu"? Можно ли это переопределить?

Аватар пользователя roman-yrv roman-yrv 22 марта 2013 в 19:45

AlexION101 wrote:
Спасибо большое за ссылки на материал, уже читаю.
Модуль view обязательно буду использовать, но сначала хотелос бы понять, как механизм работает "изнутри".

Если что, есть очень хорошая книга по Drupal 7, стоит порядка 1000 рублей
http://www.drupal.ru/node/66168

AlexION101 wrote:
Прохожу код отладчиком, если Вы знаете, то можете подсказать, как сайт понимает, что html возвращаемый функцией first_articles_list() (в примере выше) необходимо поместить именно в блок content, а не в, например, блок "menu"? Можно ли это переопределить?

Я предполагаю, что данный код и будет по умолчанию помещаться в блок $content.
А переопределить это, думаю, можно при разработке своей темы - там есть множество хуков, выполняемых на разных этапах формирования страниц.
Вот, к примеру, хорошая подборка материалов, показывающих возможности темизации
http://xandeadx.ru/blog/tags/theming

Скажу больше. Знание темизации позволит натянуть на Drupal практически любую верстку.