Автогенерация заголовка

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

Аватар пользователя yasik yasik 28 марта 2008 в 18:43

Добрый день,
Может кому-то пригодится
Для автоматической генерации заголовка нужно взять модуль Automatic Nodetitles http://drupal.org/project/auto_nodetitle
он делает несколько вещей во-первых отключает обязательное заполнение заголовка, во-вторых можно сделать так чтоб поле заголовока вообще не выводился и заполнялось само и третье если поле осталось пустое заполнилось само.

Если нужно сделать так чтоб заголовок создавался автоматически и при этом был уникальный например имел какой-то буквенный индекс и номер вида АК-123 за нумерацию возьмем номер ноды. Вся загвоздка в том что на момент генерации заголовка нет еще номера у текущей ноды на drupal.org предложили брать индекс из базы и прибавлять один.
<?php
$name = db_prefix_tables('{node}_nid');
$id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 1;
return $id;
?>
а если нужно перед цифрами добавить буквенный индекс

то нужно его изменить вот так
<?php
$name = db_prefix_tables('{node}_nid');
$id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 1;
return "AК-".$id;
?>

хотелось сделать еще такую штуку чтоб заголовок создавался в зависимости от значения какого-то поля из формы
попробовал такой код
но он не работает может кто подскажет где ошибка

<?php
echo "#".$node->field_lev[0]['view']."#";
if ($node->field_lev[0]['view'])
{
$name = db_prefix_tables('{node}_nid');
$id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 1;
return "EAK-".$id;
}
else { $name = db_prefix_tables('{node}_nid');
$id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 1;
return "AK-".$id;

}?>

в 2 сторке отладочный код в результате получается название таким ##AK-125 т.е на момент создание заголовка переменная не имеет значений и все происходит по ветке else
может это можно как-то из браузера вытащить ее значение

Буду благодарен за любую подсказку хоть в каком направление копать

Комментарии

Аватар пользователя T-34 T-34 29 марта 2008 в 2:13

Мне тоже нужно вывести взаголовок значения полей, а именно заданные при создании ноды термины.
Похоже, что средствами Automatic Nodetitles и Token это реализовать невозможно.
А нельзя ли сделать это в шаблонах?

Аватар пользователя yasik yasik 29 марта 2008 в 3:20

есть такая идея но я ее представляю теоретически так как в php не силен можно запускать скрипт время от времени который будет делать выборку по базе и переименовать ноды

Аватар пользователя Xermit Xermit 11 августа 2009 в 0:14

Возможно я не в свой огород лезу, я так понимаю нужно место где можно собрать все данные связанные с узлом, обработать их и выдать как заголовок страницы. Я думаю, что можно было бы использовать стандартные возможности функции _phptemplate_variables($hook, $vars) в template.php:

static $head_title_save;

if($hook == 'node')
{
  здесь генерируете новый заголовок для узла используя 
  соответствующие переменные из $vars

  потом сохраняете куда нить сгенеренный заголовок будь-то
  статический массив по узлам, или просто в кеш
  с помощью функций кеширования
  $head_title_save = новый($vars['title']); 
  $vars['title'] = "";
  return $vars;
}
if ($hook == 'page')
{
  здесь загружаете созданный ранее заголовок из кэша
  или статического массива

  подменяете собственно сам заголовок на свой
  $vars['head_title'] = strip_tags($head_title_save);

  return $vars;
}

В первой части используя данные из массива $vars можно создать новый заголовок и сохранить его где нибудь, а во второй части подменить стандартный заголовок на сохраненный.

Например, в заголовке узла можно сохранить собственно какой нить шаблон для генерации заголовка и использовать его в первой части, взяв его из $vars['title'].