Как правильно загрузить ноды?

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

Аватар пользователя xurshid29@gmail.com xurshid29@gmail.com 18 июня 2012 в 22:25

Здравствуйте.
Создал кастом нод файл. Содержимые нода содержат только из PHP. То есть из CCK полей ни одного нет. Все отключены. Вот так выглядит файл: node--prfilter.tpl.php

<?php if($teaser): ?>
    <p><a href="<?php print base_path() . drupal_get_path_alias('node/' . $nid); ?>"><?php print $node->title; ?></a></p>
<?php else: ?>
   
    <div class="prfilter_menu">
        <?php print views_embed_view('prfilter_inner_menu_deystvie', $display_id = 'block'); ?>
    </div>

    <div class="filtercontainer">
        <div class="filtercontainer_left">
            <div class="filtercontainer_body">
                <?php
                    $qtname = 'pr_poly';
                    print drupal_render(quicktabs_build_quicktabs($qtname));
                ?>
                <h4><?php //print $node->title; ?></h4>
            </div>
        </div>

        <div class="filtercontainer_right">
            <?php print render($content['field_filterimg']); ?>
        </div>

        <div class="quicktab_content_load">
            <?php
                    $qtname = 'real_item';
                    print drupal_render(quicktabs_build_quicktabs($qtname));
                ?>
           
        </div>
       
    </div>

<?php endif; ?>

Тут есть 1 views блок, 2 quicktabs. Quicktabs выводят разные views.

Но проблема в том что когда открываю ссылки этого типа все нормально работает. А когда загружаю через AJAX там никакие embedded коды нет. То есть views блок пуст, табы пусты. Посоветуйте, пожалуйста, что можно сделать чтоб AJAX загрузил целый нод который я настроил?

ЗЫ\\ Вот хелпер функция который загружает нод:

function _ajax_load_node_content($nid = 0) {
    $node = node_load($nid);
    if ($node) {
        $vnode = node_view($node);
        return theme("node", $vnode);
    }
}

Комментарии

Аватар пользователя man-1982 man-1982 19 июня 2012 в 11:05

Посмотрите внимательно функцию node_view - она сама использует theme('node', $node, $teaser, $page);
В вашем случае скорей всего надо просто return node_view($node, $teaser = FALSE, $page = FALSE, $links = TRUE);
Ну как то так...

Аватар пользователя xurshid29@gmail.com xurshid29@gmail.com 19 июня 2012 в 16:40

Спасибо за ответ, но проблема еще не решена. Ваш кусок код возвращает только слово Array..
Не могу понят, если пишу вот таким образом:

function _ajax_load_node_content($nid = 0) {
    return views_embed_view ('name_of_view','display', $nid);
}

работает нормально, а в моем случае views_embed_view('name_of_view','display') находится в tpl файле и quicktabs тоже содержат только из views_embed. Непонятно, тут что то мешает функцию вытаскивать views_embed, или функция theme() не разрешает, еще не знаю..
Потому что view_node() возвращает мне правильный массив, то есть полный массив со всеми инфо. А после перехода массива через theme(), мне возвращаются только 7 строка слова, а они уже только названия tabs. Остальные инфо не знаю куда делись.

Аватар пользователя man-1982 man-1982 19 июня 2012 в 15:39

У quicktabs есть своя функция темизации ... может быть в этом причина
http://drupal.org/node/679148....
Я когда работа с qicktab ... шел так сказать от обратного создавал табы... потом вьюхи... потом подставлял эти вьюхи в табы...

Аватар пользователя xurshid29@gmail.com xurshid29@gmail.com 19 июня 2012 в 16:23

я думаю, quicktabs нормально выполняет свою работу. То есть табы выводятся. А views нет. Вот здесь есть views:

<div class="prfilter_menu">
     <?php print views_embed_view('prfilter_inner_menu_deystvie', $display_id = 'block'); ?>
 </div>

но не выводятся.
Здесь:

<div class="filtercontainer_body">
                <?php
                    $qtname = 'pr_poly';
                    print drupal_render(quicktabs_build_quicktabs($qtname));
                ?>
                <h4><?php //print $node->title; ?></h4>
            </div>

И здесь:

<div class="quicktab_content_load">
            <?php
                    $qtname = 'real_item';
                    print drupal_render(quicktabs_build_quicktabs($qtname));
                ?>
 
        </div>

Ну, хотя здесь табы, но на самом деле тут рендерятся views.

Аватар пользователя man-1982 man-1982 19 июня 2012 в 17:15

Так Хуршид, давай повторим заклинание у нас есть виевс 'prfilter_inner_menu_deystvie' которые не выводиться через

<div class="prfilter_menu">
     <?php print views_embed_view('prfilter_inner_menu_deystvie', $display_id = 'block'); ?>
 </div>

.... интересно... а ему надо передавать какие то параметры этому блоку... который формируется через views. Может ему аргументов не хватает?
Установи у себя модуль devel и поробуй выполнить такой код, на странице devel/php

dpm(views_embed_view('prfilter_inner_menu_deystvie', $display_id = 'block'));

ну и скажешь что выводиться

Аватар пользователя xurshid29@gmail.com xurshid29@gmail.com 19 июня 2012 в 17:36

Когда обычная загрузка все нормально.

Вот ссылка на ajax: http://dida.uz/rano/ А там нажмите на Антигельминтное, или Антисептическое.. Потом выберите ссылку.

A здесь ссылка на готовый нод (через об. загрузки): dida.uz/rano/ru/content/erva-sherstistaya-pol-pola13-0

Аватар пользователя goodboy goodboy 19 июня 2012 в 19:14

В функции _ajax_load_node_content после $node = node_load($nid); посмотрите структуру $node. Возможно, где-то есть уже сформированный текст (в body, например).

Аватар пользователя man-1982 man-1982 19 июня 2012 в 20:53

Вот пришла идея в голову... views и табы на страницу цепляют свои некие яваскрипт-файлы.. как вариант они не цепляются в шаблоне... можно попробывать цеплять js в препроцессе... ну как то так... Вообщем история довольно запутана...
При просмотре фаербагом... запросы на сервер шлються с сервера приходит ответ...но не обрабатывается.
Мой вывод таков: их не обрабатывает яваскрип на странице...НО могу и ошибаться...все мы люди Smile

Аватар пользователя xurshid29@gmail.com xurshid29@gmail.com 19 июня 2012 в 22:11

"man-1982" wrote:
Вот пришла идея в голову... views и табы на страницу цепляют свои некие яваскрипт-файлы.. как вариант они не цепляются в шаблоне... можно попробывать цеплять js в препроцессе... ну как то так... Вообщем история довольно запутана...
При просмотре фаербагом... запросы на сервер шлються с сервера приходит ответ...но не обрабатывается.
Мой вывод таков: их не обрабатывает яваскрип на странице...НО могу и ошибаться...все мы люди :)

Не знаю как это сделать, но по моему если загрузить все эти views и табы прямо в модуле, они будут работать.. Потому что 1-ajax запрос, который загружает список товаров, прямо загружает views, и они нормально выводятся..
Но как это реализовать, не знаю.. может через hook_theme..

Аватар пользователя man-1982 man-1982 20 июня 2012 в 14:33

Ну что Хуршид, решил что то... если нет... можешь вечером в часов 9 в скайп стукнуться (по Москве)... он там в профиле указан....
Но повторюсь еще раз данные возвращаются... они просто скриптом не обрабатываются..

Аватар пользователя xurshid29@gmail.com xurshid29@gmail.com 10 ноября 2015 в 11:48

"man-1982" wrote:
Ну что Хуршид, решил что то... если нет... можешь вечером в часов 9 в скайп стукнуться (по Москве)... он там в профиле указан....
Но повторюсь еще раз данные возвращаются... они просто скриптом не обрабатываются..

Спасибо вам за ответы.. Но, к сожалению, до сих пор не работает.
У меня мысли изменились:). Значить так:
1. ява скрипты работают, потому что таб работает;
2. дела не в hook_theme();
3. если поменяю:

function _ajax_load_node_content($nid = 0) {

    $node = node_load($nid);
    if ($node) {
        $vnode = node_view($node);
        return theme("node", $vnode);
    };
   
}

на:

function _ajax_load_node_content($nid = 0) {

    return views_embed_view('prfilter_inner_menu_deystvie','block', $nid);
   
}

ничего не выходит. А вообще-то по идею views должен выводится на страницу.
Почему так говорю, потому что другие ссылки, например, Антигельминтное, или Антисептическое (1-уровень), они точно по этому принципу работают, то есть callback возвращает views.

Может аргументы не передаются? как передать хрень знает..

ЗЫ.// внизу мой простенький модуль