Бывают ситуации, когда нужно == "хочет заказчик", чтобы подгрузка контента ноды происходила при клике на ссылку, используя при этом ajax, без обновления при этом всей страницы.

Реализовать все дело не так уж сложно. Для начала создадим свой модуль (для примера я использовал название lmodule) со следующим содержанием.

lmodule.info

; $Id$ 
name = lmodule 
description = test lmodule. 
package = Example 
version = VERSION 
core = 7.x

lmodule.module

 
// $Id$ 
/** 
 * @file
 * Stillfinder's module for node ajax load
 */
 
// Еще фото --------
function lmodule_menu() {
  $items['touritems/get/tour'] = array(
    'page callback' => 'lmodule_get_touritem_ajax',
    'type' => MENU_CALLBACK,
    'access arguments' => array('access content'),
  );
  return $items;
}
 
function lmodule_get_touritem_ajax($nid) {
    // new code ==================
    $node = node_load($nid);
    $title = $node->title;    
    node_build_content($node);
    $body = drupal_render($node->content);    
    drupal_json_output(array('status' => 0, 'title' => $title, 'body' => $body ));
}
 
function lmodule_init() {
 
}
 
 

И добавляем в наш файл с javascript кусочек следующего содержания:

(function($) {
    Drupal.behaviors.UNIQUE_FUNCTION_NAME = {
        attach: function (context, settings) {
            $('.plan_circle_item').bind('click', function(){
                var nid = $(this).attr('value');
                $.get('/touritems/get/tour/'+nid, null, nodeDetails);
 
                return false;
            });
        }
    };
 
    var nodeDetails = function(response) {
            var result = Drupal.parseJson(response);
            $('#tour_body').html(result.body);
            $('#tour_title').html(result.title);
 
            Lightbox.initList();
        }
 
        Drupal.parseJson = function (data) {
            // Use native JSON method when available.
            if ( typeof JSON === "object" && JSON.parse ) {
                data = JSON.parse(JSON.stringify(data));
            } 
            else {
                if ((data.substring(0, 1) != '{') && (data.substring(0, 1) != '[')) {
                    return { status: 0, data: data.length ? data : Drupal.t('Unspecified error') };
                }
                data = (new Function("return " + data))();
            }
            return data;
        };
 
})(jQuery);

Адаптируем некоторые вещи для себя, если это будет неободимо и все. Готово

Решение работает для Drupal 7, но если немного адаптировать, то будет работать и под 6-ку. Если кому интересно - могу выложить.

Комментарии

Отличное решение. С вашей помощью сэкономила время, спасибо.

Всегда пожалуйста )

exactly where do you begin out? First thing you certainly can certainly do is start incorporating nearby to your own keyword phrases. A very good illustration would be if you are available essential oils, your own key words could be"essential oils," or"high quality essential oils." Now you would like to present nearby, which means you turn your key words into a long-term key word using area, such as for example"essential oils London" or"essential oils in New York" as examples My blog post - Read the Full Posting

Спасибо дружище!

пожалуйста )

where would you start? The first thing you can certainly do is begin incorporating community into your keywords. A superior example is if you are selling essential oils, your key words could be"essential oils," or"high quality essential oils." Nowadays you would like to introduce community, and that means you can turn your key word into a long tailed key word with place, such as"essential oils London" or"essential oils in New York" as illustrations Also visit my blog post; Shelby

Есть рабочий пример? Что-то не догоняю, а сформулировать не могу :)

Ну пример выше как-бы рабочий :)

Имеется ввиду не описание решения, а реальная рабочая кнопка с загрузкой ноды по аяксу. У меня лайтбокс не срабатывает, запрос уходит, ответ получает, а в лайтобоксе не показывает, модуль lightbox2 стоит. Возможно не так оформляю, поэтому прошу пример.

А... понял, ну где-то оно есть, но честно говоря, не помню уже на каком сайте. А что в console firebug пишет? нету ошибок?

Ну, пишет GET url 200 ok 433ms, типа всё путём судя по "$(this).attr('value')" реализовал через <input type="button" value="47" class="plan_circle_item"> (47-nid) может тут прокол?

попробуйте после var nid = $(this).attr('value'); вставить console.log(nid); Что оно выводит ?

Этот кусок кода работает отлично: запрос отправлен - ответ получен, не работает именно Lightbox.initList(), каким образом он должен подхватывать содержимое $('#item_body') и $('#item_title') для демонстрации в лайтбоксе, возможно, не постигаю правильный феншуй, потому и нужен пример для просветления.

Я точно не помню, но может там должен быть какой то класс или атрибут у элементов для работы Lightbox.initList();

Здравствуйте. Подскажите пожалуйста. А как быть если на сайте 2 языка. Я так понимаю, что вы выгружаете ноду на определенную страницу в div (ну или p, не важно). Но если два языка, разметка страницы , конечно, не изменится, но адрес версии страницы на другом языке, уже будет другой. Как этот вопрос можно урегулировать в коде, подскажите пожалуйста.

Ну Вы можете на стороне сервера узнать текущий язык, например: global $language; if($language->language == 'en') { } ну или в switch-case это все дело заключить. Ну и дальше использовать, например, translation_node_get_translations : https://api.drupal.org/api/drupal/modules!translation!translation.module/function/translation_node_get_translations/7 Пишу с телефона, по памяти и поэтому могут быть неточности. Если будут вопросы - обращайтесь.

where do you begin? The first thing you can do is start off incorporating local into your key phrases. A great instance is if you are available essential oils, your own key words could possibly be"essential oils," or even"high quality essential oils." Nowadays you wish to introduce nearby, so you can just turn your key word to some long-term key word using location, these as for instance"essential oils London" or"essential oils in New York" as examples Also visit my blog; relevant internet site

Выложи пожалуйста. Получается, он жестко привязан к типу контента и структуре. Придется дописать настройки модуля (для универсальности). + Не совсем понял, куда прятать JS-код, подключил прямо в модуле drupal_add_js(), витоге получил вал ошибок...

Каких, например?

Levitra Tabs buy cialis online Amoxicillin For Sale On The Internet

where do you begin? The first thing you can do is start off incorporating local into your key phrases. A great instance is if you are available essential oils, your own key words could possibly be"essential oils," or even"high quality essential oils." Nowadays you wish to introduce nearby, so you can just turn your key word to some long-term key word using location, these as for instance"essential oils London" or"essential oils in New York" as examples Here is my weblog :: relevant internet site

exactly where do you begin out? First thing you certainly can certainly do is start incorporating nearby to your own keyword phrases. A very good illustration would be if you are available essential oils, your own key words could be"essential oils," or"high quality essential oils." Now you would like to present nearby, which means you turn your key words into a long-term key word using area, such as for example"essential oils London" or"essential oils in New York" as examples My web page :: Read the Full Posting

where would you start? The first thing you can certainly do is begin incorporating community into your keywords. A superior example is if you are selling essential oils, your key words could be"essential oils," or"high quality essential oils." Nowadays you would like to introduce community, and that means you can turn your key word into a long tailed key word with place, such as"essential oils London" or"essential oils in New York" as illustrations My web-site; Shelby

Добавить комментарий