Есть у меня на сайте самописный модуль и в нём я использую _preprocess_html. Модуль генерирует в 1 ноде много страниц и мне нужно отдельный title для каждой страницы. Код для смены тайтла:
<?php
function my_module_preprocess_html(&$vars) {
$vars['head_title'] = 'My custom title';
}
?>
Только вот тайтл на странице не меняется, наверное как я думаю проблема в приоритетности и функция исполнаяется не последней. Кто-то знает как решить проблему?
Комментарии
а не стоит ли часом модуль metatag ?
приоритетность хуков можно менять через hook_module_implements_alter
Стоит. Думаете проблема подстраниц связана с модулем metatag? Я пробовал менять с помощью хука безрезультатно. Вот так:
<?php
function mymodule_module_implements_alter(&$implementations, $hook) {
if ($hook == 'preprocess_html') {
$group = $implementations[mymodule];
unset($implementations[mymodule]);
$implementations[mymodule] = $group;
}
}
?>
Поставить в template.php темы, или задачть weight в system для модуля или использовать хук установки приоритета модуля
Weight менял ничего не давало. Но самая соль в том что когда я использовал хук сначала, то всё работало отлично и потом в определенный момент перестал работать, хотя изменений я не делал в модуле. И если я впишу функции просто в модуль без условий смена работает.
Я могу поставить в template.php, но вот будут ли работать условия которые у меня в модуле прописаны?
template.php работает после всех модулей.
А как правильно в template.php сделать условие например по типу материала, а потом по аргументу. В модуле я делаю так:
<?php
function my_module_node_view($node, $view_mode, $langcode) {
if ($view_mode == 'full' && $node->type == 'book' && arg(0) != 'comment') {
/* Какой-то код */
if (arg(4) >= '0') {
/* Set Title and meta tag */
function my_module_preprocess_html(&$vars) {
$vars['head_title'] = 'Кастомная Страница';
}
}
}
}
?>
Можно получить объект со страницы
$node = menu_get_object()
да и в vars можно найти всё что надо.
Спасибо за подсказку. Я то что могу получаю через menu_get_object() и $vars. Но есть такое что там нету и просто я делаю глобальную переменную и потом вставляю в кастомный тайтл. Нормально ли так делать?
Можно и так
Может кому-то нужно будет, вот код в template.php для типа материала "book_category".
<?php
function THEMENAME_preprocess_html(&$vars) {
if(!empty(menu_get_object())){
$node = menu_get_object();
global $book, $book_name;
//print_r ($node);
// Custom title on page book
if ($node->type == 'book_category' && !empty($book)) {global $conf, $current_page_now;
$vars['head_title'] = $book . ' - Страница ' . $current_page_now . ' - ' . $conf['site_name'] . ' | ' . $conf['site_slogan'];
//print_r ($vars);
}
if ($node->type == 'book_category' && !empty($book_name)) {
global $conf, $current_page_now;
$vars['head_title'] = $book_name . ' - Страница ' . $current_page_now . ' - ' . $conf['site_name'] . ' | ' . $conf['site_slogan'];
//print_r ($vars);
}
}
}
?>