Проблема с выводом ноды, переопределённой views представлением.

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

Аватар пользователя astrameridian astrameridian 8 декабря 2016 в 18:53

Задача:
Получить страницу созданную через views, замещающую стандартную node страницу с поддержкой синонимов в url адресе (модуль pathauto), поддержкой метатегов прописанных на основе токенов полей ноды (модуль metatag), выводом хлебных крошек (модуль path_breadcrumbs) и без вывода заголовка ноды.

Решение:
1. Cоздано views представление с машинным именем: page и машинным именем отображения: airport, путь: airport/%, контекстный фильтр: Содержимое: Nid (скриншот:http://prntscr.com/dgw9h0), заголовок: Нет.

2. В шаблонах темы добавлен файл: node--airport.tpl.php (где airport - машинное имя типа материала), в котором копия содержимого файла в теме (page.tpl.php) и сверху добавлен код:

<?php if ($node->type=="airport") : ?>
    <?php print views_embed_view('page','airport'$node->nid); ?>
<?php 
else: ?>

3. Шаблон генерации синонимов для материалов типа airport: airport/[node:title] (где заголовок ноды 3-х буквенное уникальное для всех нод значение)

4. В настройках модуля metatag для типа материала airport прописаны метатеги, которые берут значения из полей ноды.

5. В настройках модуля Path Breadcrumbs: Основное (путь: node/%node), Аргументы (скриншот: http://prntscr.com/dgxf37), Правила выбора (скриншот: http://prntscr.com/dgxffm)

Проблемы:
1. При запросе страницы по системному адресу, например: /node/17 получаю результат созданного views представления с работающими метатегами определёнными для типа материала airport и работают хлебные крошки, НО выводится заголовок ноды (хотя во views представлении значение поля заголовок указано: Нет).

2. При запросе синонима страницы, например: /airport/abl получаю пустую страницу (только шапка, правая боковая панель, а содержимого страницы нет) и не работают метатеги (то есть выводятся метатеги прописанные в самом views, а не те метатеги, которые прописаны для типа материала airport) и не выводятся хлебные крошки. Уточню, что так выводится для анонимного посетителя, для админа выводится также как в п.1 (при этом в настройках доступ для views указано: Доступ:Право доступа | Просмотр опубликованных материалов).

Вопросы:
Нужно, чтобы по запросу страницы-синонима материала для анонима отображалcя результат вывода views представления, работали метатеги, отображались хлебные крошки, не выводился заголовок ноды. Какие ошибки допускаю?

Лучший ответ

Аватар пользователя astrameridian astrameridian 9 декабря 2016 в 19:49

Источник проблемы был найден: язык сайта по умолчанию стоял английский, а интерфейс админа русский, в итоге для анонимов ноды не показывались (т.к. имели русский язык), а для админа показывались. При изменении дефолтного языка сайта на русский, ноды для анонимов стали показываться.

Решение проблемы: в базе данных в таблицах node и url_alias был изменён язык на en (английский), после этого дефолтный язык был переключен обратно на английский и ноды для анонимов успешно показывались.

НО. Осталась проблема вывода заголовка ноды, который выводить не нужно (т.к. там всего 3 буквы).

Решение:
1. В папке темы в файл tempate.php добавить код (заменив pixture_reloaded на название вашей темы):

<?phpfunction pixture_reloaded_preprocess_page(&$vars, $hook) {
    if (isset($vars['node'])) { 
        $vars['theme_hook_suggestions'][] = 'page__'. str_replace('_', '--', $vars['node']->type);
    }
}?>

Этим действием мы прописали в теме переопределяющий шаблон: page--МАШИННОЕимяТИПАматериала.tpl.php

2. Сделать копию файла page.tpl.php в папке темы, изменив название на: page--airport.tpl.php

3. Удалить в файле page--airport.tpl.php строку выводящую заголовок, в моём случае удалил строку:
<h1 id="page-title"><?php print $title; ?></h1>

Комментарии

Аватар пользователя sergeybelya sergeybelya 8 декабря 2016 в 19:26
1

astrameridian wrote:

Какие ошибки допускаю?

Ошибка в самой постановке задачи. Зачем выводить страницу ноды с помощью views?

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

Следуя по вашей наводке, удалил в папке темы шаблон: node--airport.tpl.php и отключил созданное представление. В итоге обнаружил следующую ошибку: для анонима при запросе страницы: /airport/aaa выдаётся сообщение что страница не найдена, хотя в списке созданных синонимов такой синоним есть (при этом в качестве админа страница показывается без проблем).

(проверил права для анонимов, отмечено: Просмотр опубликованных материалов, обновил права доступа к материалам (admin/reports/status/rebuild), проверил что в базе данных в таблице users есть запись с uid=0, удалил и заного создал все синонимы путей, очистил все кеши, запустил обновление, запустил cron - ситуация не поменялась.)

Получается есть какая-то проблема с тем, что анонимам при запросе синонима материала, показывается Страница не найдена (при запросе системного адреса страницы, страница успешно отображается), а админу показывается страница корректно и с системным адресом и с синонимом.

Из-за чего такое может быть?

Аватар пользователя astrameridian astrameridian 9 декабря 2016 в 19:49

Источник проблемы был найден: язык сайта по умолчанию стоял английский, а интерфейс админа русский, в итоге для анонимов ноды не показывались (т.к. имели русский язык), а для админа показывались. При изменении дефолтного языка сайта на русский, ноды для анонимов стали показываться.

Решение проблемы: в базе данных в таблицах node и url_alias был изменён язык на en (английский), после этого дефолтный язык был переключен обратно на английский и ноды для анонимов успешно показывались.

НО. Осталась проблема вывода заголовка ноды, который выводить не нужно (т.к. там всего 3 буквы).

Решение:
1. В папке темы в файл tempate.php добавить код (заменив pixture_reloaded на название вашей темы):

<?phpfunction pixture_reloaded_preprocess_page(&$vars, $hook) {
    if (isset($vars['node'])) { 
        $vars['theme_hook_suggestions'][] = 'page__'. str_replace('_', '--', $vars['node']->type);
    }
}?>

Этим действием мы прописали в теме переопределяющий шаблон: page--МАШИННОЕимяТИПАматериала.tpl.php

2. Сделать копию файла page.tpl.php в папке темы, изменив название на: page--airport.tpl.php

3. Удалить в файле page--airport.tpl.php строку выводящую заголовок, в моём случае удалил строку:
<h1 id="page-title"><?php print $title; ?></h1>