Формирование sitemap.xml через xmlsitemap

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

Аватар пользователя madgals madgals 21 февраля 2013 в 18:16

В общем наметилась небольшая проблема. Есть у меня карта сайта и выводятся в ней ссылки на ноды стандартного вида. А мне надо эти ссылки альтернуть и выводить их не в формате node/nnn, а news/nnn. Как будет лучше всего решить данную проблему ?

Комментарии

Аватар пользователя madgals madgals 21 февраля 2013 в 18:29

нет нет. может я не так выразился. стоит модуль xmlsitemap. он генерит карту сайта. в ней появляются ссылки sitename/node/XXX. вот мне это альтернуть надо, а не алиасы урлов. документации нет, в api дано лишь абстрактное представление о возможностях модуля. Т.е. мне все node/XXX в сайтмапе надо поменять на news/XXX
P.S. Нельзя давать такие алиасы нодам, потому что по этим урлам уже есть страница-панель, которая обрабатывает эти запросы

Аватар пользователя aa2ndrew aa2ndrew 21 февраля 2013 в 20:04

Примерно так:

<?php
function имя_модуля_xmlsitemap_link_alter(&$link) {
  if (
$link['type'] == 'node') {
    if (
$link['subtype'] == 'news') {
      
$node node_load($link['id']);
      
$link['loc'] = 'news/' $node->nid;
    }
  }
}
?>
Аватар пользователя fil.diesel fil.diesel 22 февраля 2013 в 12:00

Если sitemap уже сформирован здесь один вариант, только через правку Таблицы : xmlsitemap
не знаю как вам удобнее: ручками править, или цикличным запросом в бд...
В общем нужно выбрать с таблицы поля с type = node и заменить поле
loc = node/1 на loc = news/1 и т.д
далее чистим кэш и запускаем крон

Аватар пользователя aa2ndrew aa2ndrew 22 февраля 2013 в 16:46

"fil.diesel" wrote:

Если sitemap уже сформирован здесь один вариант, только через правку Таблицы : xmlsitemap
не знаю как вам удобнее: ручками править, или цикличным запросом в бд...
В общем нужно выбрать с таблицы поля с type = node и заменить поле
loc = node/1 на loc = news/1 и т.д
далее чистим кэш и запускаем крон

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

Аватар пользователя fil.diesel fil.diesel 22 февраля 2013 в 18:03

"aa2ndrew" wrote:
только это все средствами друпала, а не костыль.

это все понятно, но вопрос был в том как заменить уже существующие записи
извините но ваш хук тут совершенно не уместен...
Решение

<?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($linksTRUE))));
?>
Аватар пользователя Serba23 Serba23 5 сентября 2013 в 16:30

А как быть при создании карты сайта, для терминов он генерирует ссылки вида taxonomy/term/tid а нужно test/tid. Редирект не прокатит. Хотелось бы видеть в sitemap.xml ссылки вида test/tid.