Заранее извиняюсь за нубский вопрос. В друпале я всего пару дней копаюсь, до этого работала в других цмс.
Долго искала на него ответ, но так ничего путного и не нашла, буду рада если вы ткнете меня носом в нужную документацию или подскажите решение проблемы.
Работаю в drupal 7.
Допустим, у меня есть сайт, где нужно вывести новости, пару страниц и список людей(все будет создавать администратор, регистрация не уместна). Все создаю через ноды, для списка людей есть определенный тип материала содержащий нужные поля (CCK). Этот список прекрасно выводится через views, однако с нумерацией этих людей возникает проблема. Я нумерую его на выводе вьюхи с помощью Ordered list, но когда я открываю страницу первого человека, адрес будет типа localhost/drupal/node/3. Кроме того вывести реальный порядковый номер этого человека в его странице невозможно - только nid.
Проще говоря мне нужен модуль или какой-либо способ добиться нумерации нод по материалу указанного типа с нуля.
Или предложите другое решение данной проблемы. Мне нужно, чтобы запись нового человека начиналась с 1 и в браузерной строке и с возможностью вывода этого номера на страницу этого человека.
И еще - нужен счетчик людей, который бы выводил "Сейчас у нас # человек".
Очень надеюсь на вашу помощь.(
Комментарии
Чем плохо нумеровать по nid или uid ?
Если материалов не много, то можете вручную указать для каждого псевдоним. Например, вместо node/3 указать page/1 и т.д.
В любом случае можете заказать здесь такой модуль под свои нужны.
Думаю это будет не дорого стоить. Работы на 1-2 часа.
А неужели нет модуля, который автоматически указывает псевдоним вида page/%N% (нумерация с начала) для определенного типа материала?
Если нет - готова заказать, однако это странно.
Материалов будет достаточно много, с псевдонимом каждого возиться как-то...
Попробуйте pathauto. Хотя не знаю, как вы объясните ему, что такое "нумерация с начала".
И кстати, что будет с нумерацией если вы удалите какую нибудь ноду в списке?
http://drupal.ru/node/56601
Спасибо )
В принципе в pachauto можно вывести любое поле CCK в адресную строку...Осталось разобраться как сделать такое поле, чтобы в нем автоматически проставлялась нумерация. Такое вообще возможно? Может с помощью сниппета?
Думаю можно, но это не избавит от проблем с удаленными записями и снятыми с публикации.
Не знаю, как насчет вывода номера из views списка в pathauto. Снипет тут вряд ли нужен.
Модуль, который будет выводить нумерованный список людей и добавлять нужные псевдонимы, можно сделать за 1-2 часа.
При этом отпадет необходимость устанавливать views, pathauto и token.
А зачем нужны ноды? И как вы их привязываете к пользователям?
В 7-ке можно накладывать поля на пользователей.
Ну...
Могу предложить одно простое, хоть и не самое красивое решение.
Создаете поле - отдельное для каждого типа материала. Задаете ему тип - Число.
После чего залезаете в базу данных и вносите небольшое изменение в таблицу, а именно: AUTO_INCREMENT для значения. Для этого потребуется изменить ключи таблицы.
Ну и небольшой модуль для формы.
Работы на пару часов.
Если не хочется править базу - то потребуется лочить таблицы перед сохранением. В общем, есть проблемы с целостностью данных при одновременном доступе.
Да уж. Реализовала это с помощью модуля Serial а проблема с удалением осталась... [{field-name}-id] пропускает удаленную цифру, т.е. если serialid было =3, то при удалении этой записи следующая все равно будет 4. И похоже эта проблема не решаема
Это как реализовать? И разве проблема с удалением тогда решится?
Это не пользователи. Грубо говоря это определенный тип материала с определенными полями которые забивает администратор.
Это слишком сложно для меня Хотя если посидеть недельку может и можно разобраться как написать это все, но времени особенно нет. Хотя если это решит проблему с удалением записей...
Сначала подумайте, а является ли это проблемой?
Например, если вы хотите делать такие адреса, как user/[{field-name}-id] , то неизменность номера гарантирует, что закладки пользователей, ссылки с других сайтов, поисковые машины и прочее всегда будут ссылаться туда, куда они ссылались. Это важно.
Если вам в принципе наплевать на СЕО, то как вариант сделать модуль который по хуку_cron будет к примеру перебирать и апдейтить таблицу синонимов по нужному вам алгоритму (т.е. грубо говоря удаляет все старые синонимы связанные с вашим материалом, и создает новые с нужной последовательной нумерацией). Это решает в том числе и проблему удаленных и снятых с публикации нод, но при этом остается временной лаг между срабатываниями крона.
Можно повесить и на хук_nodeapi (op='insert','delete') и делать тоже самое, временной лаг исчезает но возрастает нагрузка при каждой операции с вашим материалам. Еще один момент я уже не помню пишется ли в кэш таблица синонимов, если пишеться то придеться еще подчищать кэш.
Вообще, самый лучший на мой взгляд вариант - создать некое хранилище нумерации (файл или таблица в БД) и при каждом создании новой ноды определенного типа брать оттуда значение, инкрементить его и задавать имя ноды с этим номером.
Хотя, возможно уже кто-то писал подобные модули, надо просто поискать.
http://drupal.org/project/serial