Программная загрузка страницы ноды

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

Аватар пользователя Zerbert Zerbert 8 декабря 2016 в 15:20

Добрый день, уважаемые коллеги!

Столкнулся с проблемой, что не могу программно загрузить страницу с нодой и вывести её в блок.
Как делаю:
Отправляю ajax запрос к php файл, в параметрах отправляю nid.
В php файле получаю nid, и хочу на его основе загрузить всю страницу вида mysite.ru/node/nid. Повторю ещё раз всю страницу целиком, со всеми скриптами, стилями и так далее.
Изначально планировал использовать функцию node_load(), но она вытягивает данные, а вывести их корректно не может.
Вот пример php файла:

<?php
<!DOCTYPE html>
<
html>
<
head>
    <
script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <
script type="text/javascript" src="//api-maps.yandex.ru/2.1/?lang=ru_RU&coordorder=longlat"></script>
    <
style type="text/css">
        .
geofield-ymap {
            
height400px;
        }
    </
style>
</
head>
<
body>
    <?
php
        define
('DRUPAL_ROOT'getcwd());
        
$_SERVER['REMOTE_ADDR'] = "localhost"// Необходимо при работе из командной строки
        
require_once DRUPAL_ROOT '/includes/bootstrap.inc';
        
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

        if (!empty(

$_GET['nid'])){
            
$node node_load($_GET['nid']);
            
$view_node node_view($node,'full',NULL);
            
$render_node render($view_node);
            
print_r($render_node);
        }

    

?>
</body>
</html>
?>

Всю структуру ноды я получаю, но при попытке вывести её получаю всего 2 поля, title и body, остальные не выводятся и в консоли никаких ошибок.
Вот скриншот результата:
Результат

Вопрос: Как мне вывести тут всю страницу целиком? Вмести со всеми дополнительными блоками views, которые на странице ноды имеются, шапкой сайта. Хочу, чтобы полученная страница ничем не отличалась от оригинальной, но выводилась во всплывающем блоке.

Скорее всего у меня сам подход к решению данной задачи не верный, поэтому прошу направить меня в нужное русло

Комментарии

Аватар пользователя Zerbert Zerbert 9 декабря 2016 в 12:11

У меня вьюшкой выводится список нод. Я добавил к каждой из них кнопку "печать". Теперь хочу, чтобы по нажатию кнопки появился всплывающий блок, в него загрузилась нода, и после этого отправить её на печать.
Сейчас я использую вариант попроще, я открываю новое окно в браузере, в него загружаю ноду и, когда документ полностью загрузится, вызываю window.print();
Это работает, но не так, как я хотел бы

Аватар пользователя gun_dose gun_dose 9 декабря 2016 в 12:16

Не выйдет ничего. Печатается всегда текущее окно, соответственно, если вывести ноду в попапе, то на печать пойдёт весь список нод вместе со всплывшей поверх него ещё одной нодой.

При этом весьма сомнительно, что кто-то, увидев на сайте в списке нод заголовок, захочет сразу распечатать всю ноду, на ещё и с хэдером и футером вашего сайта.

Аватар пользователя gun_dose gun_dose 9 декабря 2016 в 12:22

Неужели не проще всё лишнее скрыть в цсс и печатать ноду из обычного шаблона?

Как плагин работает, не совсем разобрался, но вам нужно просто в айфрейм вкинуть урл ноды, тогда там будет вся страница.

Аватар пользователя Zerbert Zerbert 9 декабря 2016 в 12:27

Использовать css значительно проще. Более того, сейчас, когда печать осуществляется в отдельном окне, именно этот метод и использую, скрывая в медиазапросе всё лишнее. Я предполагаю, что данная опция в том, виде, в котором, я хочу её видеть, скорее всего, будет избыточна для того проекта, над которым тружусь, а вот полученный опыт при реализации такой задумки, избыточным не будет никогда) Здесь цель, скорее, не создать опцию печати, а научиться программно работать с нодами и всем, что с ними связано

Аватар пользователя gun_dose gun_dose 9 декабря 2016 в 12:43

ноду можно вывести к примеру в колорбоксе, просто повесить класс colorbox на ссылку и откроется полная страница с нодой, но в колорбоксе. Вроде бы)))