Не претендую на уникальность текста, но кому-то пригодится. По крайней мере, сам себе в закладки брошу. Тема для 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.jpg | 38.6 КБ |
Комментарии
Вопрос знатокам: Отчего я не смог воспользоваться db_last_insert_id? Попытка сделать более компактную конструкцию провалилась, ибо эта функция мне возвращала в конечном итоге ноль (0). Загадка?
Думаю, эта функция вернет нормальное значение, если ты в текущем сеансе соединения уже сделал запись.
auto_nodetitle поддерживает токены в заголовках, что-нибудь типа [node-type] [nid]
Читаем внимательно Замечния и начинаем понимать почему я это предложил.
В том-то вся фишка, что лишних попыток обращения к базе не делаю, ибо судя по API сия функция должна читать, а не писать или апдейтить. Запись же будет, но только со стороны Друпала при сохранении ноды, однако получить псевдо-nid надо ДО сохранения.
ок
Так и я говорю, это не возможно. Потому как нода еще не создана.
Понял, вопрос снят. Повнимательней прочел описание функции. Спасибо.
Как вставить в тайтл значения из полей ССК формы?
А как исправить код, чтобы получать количество нод определенного типа материала в базе?
SELECT count(*) FROM node WHERE type="имя_типа"