В общем наметилась небольшая проблема. Есть у меня карта сайта и выводятся в ней ссылки на ноды стандартного вида. А мне надо эти ссылки альтернуть и выводить их не в формате node/nnn, а news/nnn. Как будет лучше всего решить данную проблему ?
В общем наметилась небольшая проблема. Есть у меня карта сайта и выводятся в ней ссылки на ноды стандартного вида. А мне надо эти ссылки альтернуть и выводить их не в формате node/nnn, а news/nnn. Как будет лучше всего решить данную проблему ?
Комментарии
http://drupal.org/project/pathauto
нет нет. может я не так выразился. стоит модуль xmlsitemap. он генерит карту сайта. в ней появляются ссылки sitename/node/XXX. вот мне это альтернуть надо, а не алиасы урлов. документации нет, в api дано лишь абстрактное представление о возможностях модуля. Т.е. мне все node/XXX в сайтмапе надо поменять на news/XXX
P.S. Нельзя давать такие алиасы нодам, потому что по этим урлам уже есть страница-панель, которая обрабатывает эти запросы
Примерно так:
<?php
function имя_модуля_xmlsitemap_link_alter(&$link) {
if ($link['type'] == 'node') {
if ($link['subtype'] == 'news') {
$node = node_load($link['id']);
$link['loc'] = 'news/' . $node->nid;
}
}
}
?>
Есть модуль global redirect
http://drupal.org/project/globalredirect
После перехода он пнёт ПС на соответствующие страницы.
Если sitemap уже сформирован здесь один вариант, только через правку Таблицы : xmlsitemap
не знаю как вам удобнее: ручками править, или цикличным запросом в бд...
В общем нужно выбрать с таблицы поля с type = node и заменить поле
loc = node/1 на loc = news/1 и т.д
далее чистим кэш и запускаем крон
Так для этого и есть тот альтер, который я указал, только это все средствами друпала, а не костыль.
это все понятно, но вопрос был в том как заменить уже существующие записи
извините но ваш хук тут совершенно не уместен...
Решение
<?php
$nids = array(1,2,3);//Номера нод в которые нужно изменить
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
$link = xmlsitemap_node_create_link($node);
$link['loc'] = 'news/'.$link['id'];
//xmlsitemap_link_save($link); // для того чтоб изменить данные в таблице раскомментируйте эту строку
$links[] = $link;
}
drupal_set_message(t('values: <pre>@values</pre>', array('@values' => var_export($links, TRUE))));
?>
Мой хук будет уместен, когда будут добавляться новые ноды.
Согласен...
А как быть при создании карты сайта, для терминов он генерирует ссылки вида taxonomy/term/tid а нужно test/tid. Редирект не прокатит. Хотелось бы видеть в sitemap.xml ссылки вида test/tid.