Первое знакомство с модулем Token, любой друпаллер начинает с включения таких модулей как PathAuto или Auto Node Titles. Этот модуль служит для подстановки различных значений в шаблоны строк других модулей.
Модуль предоставляет великое множество возможных шаблонов, но все же, довольно часто, при построении сайта не хватает специфических шаблонов. Например, у вас есть соц. сеть. Вы хотите, чтобы у топиков в личном блоге УРЛы были вида http://site.com/vasya-pupkin/post-title, а у тех же топиков, принадлежащих группе — http://site.com/group-title/post-title. Так как для одного типа контента можно прописать только один шаблон Токена, то вы можете создать либо [user-raw][title], либо [group-title][title], но не все вместе. Большинство пользователей Друпала на этом шаге зайдет в тупик и подумает, что проблему решить невозможно.
Однако, это не так. Тем более теперь, когда решение находится внутри этой статьи.
Ссылки на скачку там же.
Комментарии
Спасибо.
А сложно ли добавить к доступным параметрам поле node.tnid (номер ноды, переводом которой является данная нода), чтобы можно было генерить с помощью pathauto для ноды и её переводов на другие языки одинаковые URLы, отличающиеся лишь языковым префиксом?
(См. Token feature request http://drupal.org/user/39430).
P.S. На drupaldance комментарии не принимаются - скрытая капча не пускает.
Да, Григорий, именно под впечатлением от вашей ситуации была создана статья, только я забыл какая конкретно была у вас проблема
Скачайте модуль для нужной ветки Дру, откройте файл bonus_token.module, в нем замените функции на:
if ($type == 'node') {
$node = $object;
$tokens['tnid'] = $node->tnid;
return $tokens;
}
}
function bonus_token_token_list($type = 'all') {
if ($type == 'node') {
$tokens['node']['tnid'] = t("Language prefix of a node");
return $tokens;
}
}
Проблема скорее всего решится, но я не совсем уверен, что в ноде есть конкретно поле $node->tnid, посему проверка за вами. Если не будет работать, надо будет просто поискать, где в объекте ноды хранится этот идетификатор.
На счет комментов на сайте — странно. Все проверил, вроде работает. Какой у вас браузер?
Спасибо, попробую.
В Д6 tnid хранится в таблице node, поле tnid; "$node->tnid" используется в модулях translations и i18n.
А по поводу капчи - я пробовал под FF 3.0.1 & Opera 9.51. Даже специально отключал в FF Adblock Plus, но не помогло.
А сегодня почему-то вообще не могу зайти на drupaldance - сайт прекрасно пингуется, но открываться не хочет.
Сейчас там какие-то проблемы с хостингом, решаем-с.
А вот на счет капчи — весьма занятно, надо будет еще раз протестировать все.
DrupalDance поднялся, ещё раз попробовал прокомментировать под FF 3.0.1 -
* Invalid CAPTCHA token.
* Вы ввели неверный код. Пожалуйста, попытайтесь еще раз.
Каковое сообщение, наверное, должно выглядеть несколько удивительно для тех кто не в курсе и уверен, что он никакого кода не вводил
Ошибку с комментами нашел и поправил.
Я совсем не гуру Drupal. Уже давно бился над решением проблемы "красивых" url для форума. Для основных разделов форума я вручную прописал псевдонимы, например forum/2 -> forum/photo, и хотел бы для подразделов данного форума получать ссылки вида forum/photo/topic-34 или просто forum/photo/34 (где число - id ноды). Популярный вариант с транслитерацией мне сильно не нравится. Пожалуйста, подскажите, как это можно реализовать.
Не знаю, разумно ли для каждой ветки форума использовать отдельные id топиков со сквозной нумерацией (1, 2, 3... и т.п.) вместо уникального id?
расскажите как поправили...
а то у меня на сайте теперь только зарегистрированные пользователи могут добавлять комментарии...
Проверьте наявность юзера с UID=0 в таблице {users}
Я вижу, в последних версиях модуля Token реализовали нечто очень похожее, и назвали его субмодулем TokenSTARTER:
tokenSTARTER
============
Want to add your own custom tokens to a site? Not sure how to write a module? Worry no more, it's now quite easy.
...
2. Edit the .module file and change hook_token_list and hook_token_values to provide whatever additional tokens or logic your site needs.
С вот таким синтаксисом:
<?php/**
* Implementation of hook_token_list().
*/
function tokenSTARTER_token_list($type = 'all') {
if ($type == 'global' || $type == 'all') {
$tokens['global']['site-date-timestamp'] = t('The current timestamp in seconds past January 1, 1970.');
}
if ($type == 'node' || $type == 'all') {
// Node tokens here.
}
return $tokens;
}
/**
* Implementation of hook_token_values().
*/
function tokenSTARTER_token_values($type, $object = NULL) {
$values = array();
switch ($type) {
case 'global':
// Create a UNIX timestamp token.
$time = time();
$tz = variable_get('date_default_timezone', 0);
$values['site-date-timestamp'] = format_date($time, 'custom', 'Y', $tz);
break;
case 'node':
// Node tokens here.
break;
}
return $values;
}?>