[Частично решено] Знак & и знак ? в pathauto

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

Аватар пользователя mNigma@drupal.org mNigma@drupal.org 12 декабря 2011 в 1:04

Привет всем!
Помогите разобраться с знаками в модуле pathauto.
Переношу сайт на друпал и хочу сохранить старые адреса(материл - архив). Для добавляемых новых материалов использую этот модуль и транслитерацию.
Старые адреса выглядят так сайт/page.php?id=12&year=2010
В настройке пути материала прописываю page.php?id=[nid]&year=[yyyy].
В списке синонимов отображается как нужно page.php?id=12&year=2010, но при клике на ссылку посмотреть или подробнее, получаю адрес такого вида page.php%3Fid%3D12%2526year%3D2011 и выдает - доступ запрещен.
В настройках модуля на вкладке "Настройки знаков препинания", для этих знаков поставил нет действия(не заменять), только толку нет.

Подскажите где смотреть, что править.

Комментарии

Аватар пользователя Айдар Айдар 12 декабря 2011 в 1:08

"<a href="mailto:mNigma@drupal.org">mNigma@drupal.org</a>" wrote:
Подскажите где смотреть

Смотреть в поиск.
Пиши в скайп, подскажу варианты, но решения так и нет.

Аватар пользователя mNigma@drupal.org mNigma@drupal.org 12 декабря 2011 в 4:55

Айдар, спасибо за помощь!
Решил не использовать решение http://www.drupal.ru/node/21669, так как сайт не мой и хукать ядро опасно, могут снести все при обновлении.

Нужно, чтобы адрес выглядел САЙТ/page.php?id=12&year=2010
Сделал так (мне нужен вывод адреса только для full отображения):

  1. Создаю материал old_news.
  2. В настройках на вкладке автосинонимы pathauto создаю такой шаблон noindex.php/[title-raw]
  3. В robots.txt добавляю Disallow: /noindex.php/
  4. Создаю views - тип материал, views-страница с адресом page.php, отображение - материал. Добавляю аргумент Материал: Nid -> Подставить аргумент по умолчанию -> PHP код -> if($_GET['id']) return $_GET['id']; else return drupal_not_found();
  5. Темизируем ноду нашего типа материала создав в папке темы файл node-old_news.tpl.php
  6. Заменил заголовок-ссылку отображаемую при тизер показе
 <?php if ($page == 0) : ?>
<h2 class="title"> <a href="<?php print "/page.php??id=".$node->nid."&year=".format_date($node->created, 'custom','Y');?> ">
<?php print $title?>
  </a>
</h2><?php endif; ?>

P.S. Можно еще и $links переписать.

Аватар пользователя Айдар Айдар 14 декабря 2011 в 0:43

Михаил, огромное Спасибо за решение! Только у меня теперь почему-то не видны материалы, созданные таким образом, под анонимом и зарегистрированным пользователем - просто открывается страница со всеми блоками, но в поле содержимого белым-бело. Проверил права - там все в порядке. Термины видны, но ассоциированные с ними ноды - нет.

Решено с помощью Валеры перестроением кеша прав доступа.

Аватар пользователя Айдар Айдар 14 декабря 2011 в 2:22

А что подставить вместо
<?php if($_GET['ID']) return $_GET['ID']; else return drupal_not_found(); ?>
чтобы возвращало другую вьюху с адресом 'newst/news/' или просто, чтобы показывалась страница термина с алиасом 'newst/news/'?

Т.е. я по твоему примеру сделал страницы импортированных нод 'newst/news/?ID=nid'
Требуется, чтобы на странице 'newst/news/' показывался список тизеров этих нод.
Пробовал разные функции вместо drupal_not_found() прописывать, но всегда пустая страница открывается.

Аватар пользователя mNigma@drupal.org mNigma@drupal.org 14 декабря 2011 в 3:03

"Айдар" wrote:
чтобы возвращало другую вьюху с адресом

Не помню, как точно работает, но есть модуль подтягивания другой вьюхи views_field_view

Проверить существование аргумента и нахождение на нужной странице arg(), попробовать перенаправить на другую страницу. Если в самом поле аргумента не пойдет, можно темизировать вывод виевса и там прописать.