Нумерация нод по материалу указанного типа с нуля

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

Аватар пользователя LinaIzumi LinaIzumi 7 февраля 2011 в 21:16

Заранее извиняюсь за нубский вопрос. В друпале я всего пару дней копаюсь, до этого работала в других цмс. Smile
Долго искала на него ответ, но так ничего путного и не нашла, буду рада если вы ткнете меня носом в нужную документацию или подскажите решение проблемы.
Работаю в drupal 7.

Допустим, у меня есть сайт, где нужно вывести новости, пару страниц и список людей(все будет создавать администратор, регистрация не уместна). Все создаю через ноды, для списка людей есть определенный тип материала содержащий нужные поля (CCK). Этот список прекрасно выводится через views, однако с нумерацией этих людей возникает проблема. Я нумерую его на выводе вьюхи с помощью Ordered list, но когда я открываю страницу первого человека, адрес будет типа localhost/drupal/node/3. Кроме того вывести реальный порядковый номер этого человека в его странице невозможно - только nid.

Проще говоря мне нужен модуль или какой-либо способ добиться нумерации нод по материалу указанного типа с нуля.
Или предложите другое решение данной проблемы. Мне нужно, чтобы запись нового человека начиналась с 1 и в браузерной строке и с возможностью вывода этого номера на страницу этого человека.
И еще - нужен счетчик людей, который бы выводил "Сейчас у нас # человек".
Очень надеюсь на вашу помощь.(

Комментарии

Аватар пользователя Ch Ch 8 февраля 2011 в 6:30

Чем плохо нумеровать по nid или uid ?

Если материалов не много, то можете вручную указать для каждого псевдоним. Например, вместо node/3 указать page/1 и т.д.

В любом случае можете заказать здесь такой модуль под свои нужны.
Думаю это будет не дорого стоить. Работы на 1-2 часа.

Аватар пользователя LinaIzumi LinaIzumi 8 февраля 2011 в 9:31

А неужели нет модуля, который автоматически указывает псевдоним вида page/%N% (нумерация с начала) для определенного типа материала? Sad
Если нет - готова заказать, однако это странно.
Материалов будет достаточно много, с псевдонимом каждого возиться как-то...

Аватар пользователя Ch Ch 8 февраля 2011 в 10:01

Попробуйте pathauto. Хотя не знаю, как вы объясните ему, что такое "нумерация с начала".

И кстати, что будет с нумерацией если вы удалите какую нибудь ноду в списке?

Аватар пользователя LinaIzumi LinaIzumi 10 февраля 2011 в 13:05

Спасибо )
В принципе в pachauto можно вывести любое поле CCK в адресную строку...Осталось разобраться как сделать такое поле, чтобы в нем автоматически проставлялась нумерация. Такое вообще возможно? Может с помощью сниппета?

Аватар пользователя Ch Ch 10 февраля 2011 в 13:43

Не знаю, как насчет вывода номера из views списка в pathauto. Снипет тут вряд ли нужен.

Модуль, который будет выводить нумерованный список людей и добавлять нужные псевдонимы, можно сделать за 1-2 часа.
При этом отпадет необходимость устанавливать views, pathauto и token.

Quote:
для списка людей есть определенный тип материала содержащий нужные поля (CCK)

А зачем нужны ноды? И как вы их привязываете к пользователям?
В 7-ке можно накладывать поля на пользователей.

Аватар пользователя G.A. Vinogradov G.A. Vinogradov 10 февраля 2011 в 13:51

Ну...
Могу предложить одно простое, хоть и не самое красивое решение.
Создаете поле - отдельное для каждого типа материала. Задаете ему тип - Число.
После чего залезаете в базу данных и вносите небольшое изменение в таблицу, а именно: AUTO_INCREMENT для значения. Для этого потребуется изменить ключи таблицы.
Ну и небольшой модуль для формы.
Работы на пару часов.

Если не хочется править базу - то потребуется лочить таблицы перед сохранением. В общем, есть проблемы с целостностью данных при одновременном доступе.

Аватар пользователя LinaIzumi LinaIzumi 10 февраля 2011 в 14:11

"Vydrin_AP" wrote:
Думаю можно, но это не избавит от проблем с удаленными записями и снятыми с публикации.

Да уж. Реализовала это с помощью модуля Serial а проблема с удалением осталась... [{field-name}-id] пропускает удаленную цифру, т.е. если serialid было =3, то при удалении этой записи следующая все равно будет 4. И похоже эта проблема не решаема Sad

"Ch" wrote:
Не знаю, как насчет вывода номера из views списка в pathauto. Снипет тут вряд ли нужен.

Это как реализовать? И разве проблема с удалением тогда решится?

"Ch" wrote:
А зачем нужны ноды? И как вы их привязываете к пользователям?

Это не пользователи. Грубо говоря это определенный тип материала с определенными полями которые забивает администратор.

"G.A. Vinogradov" wrote:
Могу предложить одно простое, хоть и не самое красивое решение.

Это слишком сложно для меня Smile Хотя если посидеть недельку может и можно разобраться как написать это все, но времени особенно нет. Хотя если это решит проблему с удалением записей...

Аватар пользователя G.A. Vinogradov G.A. Vinogradov 10 февраля 2011 в 14:16

LinaIzumi wrote:

Да уж. Реализовала это с помощью модуля Serial а проблема с удалением осталась... [{field-name}-id] пропускает удаленную цифру, т.е. если serialid было =3, то при удалении этой записи следующая все равно будет 4. И похоже эта проблема не решаема Sad

Это слишком сложно для меня Smile Хотя если посидеть недельку может и можно разобраться как написать это все, но времени особенно нет. Хотя если это решит проблему с удалением записей...

Сначала подумайте, а является ли это проблемой?
Например, если вы хотите делать такие адреса, как user/[{field-name}-id] , то неизменность номера гарантирует, что закладки пользователей, ссылки с других сайтов, поисковые машины и прочее всегда будут ссылаться туда, куда они ссылались. Это важно.

Аватар пользователя olk olk 10 февраля 2011 в 14:50

Если вам в принципе наплевать на СЕО, то как вариант сделать модуль который по хуку_cron будет к примеру перебирать и апдейтить таблицу синонимов по нужному вам алгоритму (т.е. грубо говоря удаляет все старые синонимы связанные с вашим материалом, и создает новые с нужной последовательной нумерацией). Это решает в том числе и проблему удаленных и снятых с публикации нод, но при этом остается временной лаг между срабатываниями крона.
Можно повесить и на хук_nodeapi (op='insert','delete') и делать тоже самое, временной лаг исчезает но возрастает нагрузка при каждой операции с вашим материалам. Еще один момент я уже не помню пишется ли в кэш таблица синонимов, если пишеться то придеться еще подчищать кэш.

Аватар пользователя Alex Bacart Alex Bacart 10 февраля 2011 в 15:39

Вообще, самый лучший на мой взгляд вариант - создать некое хранилище нумерации (файл или таблица в БД) и при каждом создании новой ноды определенного типа брать оттуда значение, инкрементить его и задавать имя ноды с этим номером.
Хотя, возможно уже кто-то писал подобные модули, надо просто поискать.