[РЕШЕНО] Номера ноды в автозаполняемом заголовке.

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

Аватар пользователя AI AI 20 октября 2010 в 21:44

Не претендую на уникальность текста, но кому-то пригодится. По крайней мере, сам себе в закладки брошу. Тема для D6 явно не раскрыта, решение кусочно можно насобирать, например, отсюда для D5.

Суть проблемы: Автоматически заполнять заголовок страницы, не давая возможности вносить его пользователю (то есть скрыть от ввода). Полезно сами знаете где.
Условие: Заполнение должно быть уникальным. Используется для этого номер ноды "nid".

Решение:

1. Устанавливаем модуль [module=auto_nodetitle]. Настройки по Вашему вкусу.
Во-первых, это нам позволить решить задачу скрытия от пользователя поля ввода названия страницы.
Во-вторых, даст необходимый функционал для решения задачи с минимальными телодвижениями.
2. Заходим в редактирование целевого типа материала admin/content/types/node-type/Тип_Материала/ и в разделе "Автоматическая генерация заголовка" включаем "Автоматически генерировать заголовок и скрыть поле заголовка".
3. В поле "Шаблон для заголовка" вводим ПХП код (для непонятливых: смотрите картинку в аттаче).

<?php
$numnid 
= array();
$query db_query('SELECT nid FROM {node}');
while (
$item db_fetch_object($query)) {
    
$numnid[] = $item -> nid;
}
$result max($numnid)+1;
return 
$result;
?>

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

Замечания:
1. Токен [nid] не работает корректно в данном случае. Если вы решите использовать его, знайте:
а) При сохранении ноды токен не получит [nid], поскольку его еще нет (нода не существует, она готовится только сохраниться), соответственно заголовок ноды останется пустым.
б) Исправление ситуации только через пересохранение ноды (зайти в редактирование и вновь нажать кнопку сохранения).
2. Нет гарантии, что номер в заголовке будет совпадать с номером ноды. Он будет лишь на единицу больше последнего существующего в БД до сохранения текущей ноды. Тем не менее это значение уникально, т.к. основано на поле auto_increment. Если для вас это критично, не используйте приведенное мной решение.

ВложениеРазмер
Иконка изображения nid.jpg38.6 КБ

Комментарии

Аватар пользователя AI AI 20 октября 2010 в 21:47

Вопрос знатокам: Отчего я не смог воспользоваться db_last_insert_id? Попытка сделать более компактную конструкцию провалилась, ибо эта функция мне возвращала в конечном итоге ноль (0). Загадка?

Аватар пользователя vitg vitg 20 октября 2010 в 22:09

Думаю, эта функция вернет нормальное значение, если ты в текущем сеансе соединения уже сделал запись.

Аватар пользователя AI AI 20 октября 2010 в 22:22

"xxandeadxx" wrote:
что-нибудь типа [node-type] [nid]

Читаем внимательно Замечния и начинаем понимать почему я это предложил.

Аватар пользователя AI AI 20 октября 2010 в 22:26

"vitg" wrote:
если ты в текущем сеансе соединения уже сделал запись

В том-то вся фишка, что лишних попыток обращения к базе не делаю, ибо судя по API сия функция должна читать, а не писать или апдейтить. Запись же будет, но только со стороны Друпала при сохранении ноды, однако получить псевдо-nid надо ДО сохранения.

Аватар пользователя vitg vitg 21 октября 2010 в 0:00

"AI" wrote:
"vitg" написал(а):

если ты в текущем сеансе соединения уже сделал запись

В том-то вся фишка, что лишних попыток обращения к базе не делаю, ибо судя по API сия функция должна читать, а не писать или апдейтить. Запись же будет, но только со стороны Друпала при сохранении ноды, однако получить псевдо-nid надо ДО сохранения.


Так и я говорю, это не возможно. Потому как нода еще не создана.

Аватар пользователя AI AI 21 октября 2010 в 7:32

"vitg" wrote:
это не возможно

Понял, вопрос снят. Повнимательней прочел описание функции. Спасибо.