Меню(табы) в середине ноды

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

Аватар пользователя bifrost bifrost 28 сентября 2012 в 13:00

Здравствуйте.
Необходимо сделать в середине ноды (свой тип материала, как здесь Пример модуля для своего типа материала) меню(таб) Например "Краткое описание" и "Комментарии". Я нашёл пару примеров (jQuery tabs внутри node и Написать табы (закладки) собственноручно? Легко!) есть ещё модуль Quick Tabs. Но у меня для каждой ноды данного типа материала контент уже есть на сайте например комментарии к этой ноде. Вывести в теле ноды список со ссылками не представляет проблем, необходимо при выборе ссылки отрисовать ноду заново, но уже с новым контентом. Как это реализовать, не могу придумать. Прошу помощи. Спасибо.

Комментарии

Аватар пользователя bifrost bifrost 28 сентября 2012 в 15:34

Есть нода-товар (нода сомадельная). Визуально нода разделена на две части. В первой части характеристика товара - как то вес, цвет и т.д. Вторая часть это Меню: "Отзывы"(комментарии), "Статьи о товаре". Так вот. Как реализовать это меню? Нарисовать то его я могу. Но если подсоединяю колбэк-функцию к пункту меню "Отзывы" в хук-меню , ничего не отображается. Самодельную ноду то я отображаю в hook_view. В этот раз понятно?

Аватар пользователя divined divined 28 сентября 2012 в 15:53

Предварительно:

Сделать это меню формой, где каждому элементу присвоить ajax событие.

Я не знаю будут ли работать такой способ без форм, ни разу не пытался:

<?php
$link 
= array(
  
'#type' => 'button',
  
'#value' => '',
  
'#ajax' => array(
    
'wrapper' => 'node'
    'callback' 
=> '',
  ),
);

print 

render($link);
?>
Аватар пользователя bifrost bifrost 30 сентября 2012 в 11:24

Спасибо кто откликнулся. Так получилось, был далеко от сети.
По поводу вопроса. Что хочу в результате - при выборе пунктов меню, что бы контент ноды частично менялся. То есть, характеристика товара оставалась та же, только подтягивались комментарии или только статьи. Фактически менялся бы только контейнер с контентом, относящимся к меню-табам.

То divined - я думал реализовать это на ajax & jquery. На мой взгляд, это более громоздкое решение. Почему? Грузится дополнительный ява-скрипт, так же есть пользователи с мобильным соединением к сети, бывает отключают скрипты.

Сама нода отображается здесь:

/**
 * Implementation of hook_view().
 *
 * This is a typical implementation that simply runs the node text through
 * the output filters.
 */

function node_example_view($node, $teaser = FALSE, $page = FALSE) {
  $node = node_prepare($node, $teaser);
  $node->content['myfield'] = array(
    '#value' => theme('node_example_order_info', $node),
    '#weight' => 1,
  );

  return $node;
}

А рисуется вот так:

/**
 * A custom theme function.
 *
 * By using this function to format our node-specific information, themes
 * can override this presentation if they wish. We also wrap the default
 * presentation in a CSS class that is prefixed by the module name. This
 * way, style sheets can modify the output without requiring theme code.
 */

function theme_node_example_order_info($node) {
  $output = '<div class="node_example_order_info">';  
  $output .= t('The order is for %quantity %color items.', array('%quantity' => check_plain($node->quantity), '%color' => check_plain($node->color)));
  $output .= '</div>';
  return $output;
}

то есть в функции темизации ноды, нужно набирать в зависимости от адреса разный контент, но как сказать самой ноде?