[РЕШЕНО] Проблема приорететности _preprocess_html (Кастомный title)

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

Аватар пользователя animan animan 27 августа 2015 в 21:42

Есть у меня на сайте самописный модуль и в нём я использую _preprocess_html. Модуль генерирует в 1 ноде много страниц и мне нужно отдельный title для каждой страницы. Код для смены тайтла:

<?php
function my_module_preprocess_html(&$vars) {
    
$vars['head_title'] = 'My custom title';
}
?>

Только вот тайтл на странице не меняется, наверное как я думаю проблема в приоритетности и функция исполнаяется не последней. Кто-то знает как решить проблему?

Комментарии

Аватар пользователя animan animan 29 августа 2015 в 17:41

penexe wrote:
а не стоит ли часом модуль 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;
  }
}
?>
Аватар пользователя animan animan 29 августа 2015 в 15:30

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:
Поставить в template.php темы, или задачть weight в system для модуля или использовать хук установки приоритета модуля

Weight менял ничего не давало. Но самая соль в том что когда я использовал хук сначала, то всё работало отлично и потом в определенный момент перестал работать, хотя изменений я не делал в модуле. И если я впишу функции просто в модуль без условий смена работает.

Я могу поставить в template.php, но вот будут ли работать условия которые у меня в модуле прописаны?

Аватар пользователя animan animan 31 августа 2015 в 10:48

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:
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'] = 'Кастомная Страница';
        }
    }
  }
}
?>
Аватар пользователя animan animan 19 сентября 2015 в 13:34

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:
Можно получить объект со страницы $node = menu_get_object()
да и в vars можно найти всё что надо.

Спасибо за подсказку. Я то что могу получаю через menu_get_object() и $vars. Но есть такое что там нету и просто я делаю глобальную переменную и потом вставляю в кастомный тайтл. Нормально ли так делать?

Аватар пользователя animan animan 22 сентября 2015 в 0:21

Может кому-то нужно будет, вот код в 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);
        
}
    }
}
?>