Добрый день, уважаемые коллеги!
Столкнулся с проблемой, что не могу программно загрузить страницу с нодой и вывести её в блок.
Как делаю:
Отправляю 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 {
height: 400px;
}
</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, которые на странице ноды имеются, шапкой сайта. Хочу, чтобы полученная страница ничем не отличалась от оригинальной, но выводилась во всплывающем блоке.
Скорее всего у меня сам подход к решению данной задачи не верный, поэтому прошу направить меня в нужное русло
Комментарии
Посмотрите тут, очень доступно и качественно правильно расписано.
Спасибо за ссылку! Буду разбираться)
А зачем?
У меня вьюшкой выводится список нод. Я добавил к каждой из них кнопку "печать". Теперь хочу, чтобы по нажатию кнопки появился всплывающий блок, в него загрузилась нода, и после этого отправить её на печать.
Сейчас я использую вариант попроще, я открываю новое окно в браузере, в него загружаю ноду и, когда документ полностью загрузится, вызываю window.print();
Это работает, но не так, как я хотел бы
Не выйдет ничего. Печатается всегда текущее окно, соответственно, если вывести ноду в попапе, то на печать пойдёт весь список нод вместе со всплывшей поверх него ещё одной нодой.
При этом весьма сомнительно, что кто-то, увидев на сайте в списке нод заголовок, захочет сразу распечатать всю ноду, на ещё и с хэдером и футером вашего сайта.
Я планировал использовать данный плагин:
http://ruseller.com/lessons.php?rub=32&id=925
Он позволяет распечатать только часть страницы
Неужели не проще всё лишнее скрыть в цсс и печатать ноду из обычного шаблона?
Как плагин работает, не совсем разобрался, но вам нужно просто в айфрейм вкинуть урл ноды, тогда там будет вся страница.
Использовать css значительно проще. Более того, сейчас, когда печать осуществляется в отдельном окне, именно этот метод и использую, скрывая в медиазапросе всё лишнее. Я предполагаю, что данная опция в том, виде, в котором, я хочу её видеть, скорее всего, будет избыточна для того проекта, над которым тружусь, а вот полученный опыт при реализации такой задумки, избыточным не будет никогда) Здесь цель, скорее, не создать опцию печати, а научиться программно работать с нодами и всем, что с ними связано
ноду можно вывести к примеру в колорбоксе, просто повесить класс colorbox на ссылку и откроется полная страница с нодой, но в колорбоксе. Вроде бы)))