Таксономия, Views, Pathauto и расхакивание URL

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

Аватар пользователя kansei kansei 14 октября 2009 в 3:35

Добрый день!

Прошу общественность подсказать решение.

Есть словарь, русские термины в нем и каталог статей категоризированный по этим терминам. Хочу сделать с помощью Views+Pathauto урлы вида /имя_словаря/термин/ со списком статей по термину, а на верхнем уровне /имя_словаря/ чтобы выдавался список терминов плюс количество статей в нем. При этом:

  1. важно чтобы в урлах не было кирилицы (т.е. либо транслитерация либо синоним на латинском)
  2. при выводе списка терминов при просмотре страницы словаря (/имя_словаря/) выводились имена терминов (кои на русском)

Проблема первая - имя словаря как факт отсутствует во Views, есть только id. Да и нет у имени словарей синонимов, чтобы вписать латинский вариант.

Проблема вторая - насколько я понимаю избавится от кириллических терминов в урлах можно только посредством синонимов. Но если во Views в аргументе используется синонимы то и вывод терминов тоже в виде синонимов (но синонимы у нас заданы латинские, а нужно отобразить имя которое русское).

В общем, советуйте как найти решение!

Комментарии

Аватар пользователя penexe penexe 14 октября 2009 в 3:56

ну кароче так.
1) ставите модуль taxonomy_redirect и настраиваете пути для словарей tax1/!tid, tax2/!tid и тд.
2) настраиваете pathauto, он вам все как надо транслитеризирует имя_словаря/имя_термина
3) views2 работает только с реальными путями. поэтому создаете 1 вью с отображениями page для каждого словаря, только с разными путями tax1/% и тд. в настройках аргумента ставите
Action to take if argument is not present: Summary, sorted descending
4) заходите опять в настройки pathauto и добавляете путям tax1, tax2 соответствующие алиасы.
5) усё.

Аватар пользователя kansei kansei 14 октября 2009 в 19:17

Получилось, но почему-то при выводе урла /имя_словаря/ не может найти страницу, хотя должен выводится суммари (я его вижу в Views превью). Action to take if argument is not present: Summary, sorted descending выбрано. Что делаю не так?

Теперь еще есть другое желание - чтобы вывод /имя_словаря/all давал список всех нод (нужного типа) но сгруппированных по терминам? (по умолчанию они выводятся все скопом) т.е.:

Заголовок <Термин_1>
- Нода 1
- Нода 4
- Нода 8

Заголовок <Термин_2>
- Нода 2
- Нода 3
- Нода 5

И еще вопрос - как темизировать/управлять выводом Views суммари? Когда я добьюсь его отображения, хотелось бы добавить туда несколько деталей, к примеру поля с описанием терминов.

Аватар пользователя penexe penexe 14 октября 2009 в 20:21

"kansei" wrote:
Получилось, но почему-то при выводе урла /имя_словаря/ не может найти страницу

4й пункт сделали?
"kansei" wrote:
Теперь еще есть другое желание - чтобы вывод /имя_словаря/all давал список всех нод (нужного типа) но сгруппированных по терминам?

создайте страницу во вью tax1/all, а алиас /имя_словаря/all. row style: поля
добавте туда 2 поля
Taxonomy: Term тут галку поставить Exclude from display
Node: Nid
в Style выставить группировку по полю таксономии
после этого удалите из предыдущих отображений wildcard.
затем надо темизировать вид с путем tax1/all
создайте шаблон имя нужного файла найдете в Theme: Information, нужен будет шаблон для
Field Node: Nid (ID: nid)

<?php
$nid = $row->{$field->field_alias};
$node = node_load($nid);
print node_view($node, TRUE);
?>

потом рескан темплейтс жмакните и усё. надеюсь понятно обьяснил

Аватар пользователя kansei kansei 14 октября 2009 в 21:14

Еще раз спасибо.

Похоже я не верно добавляю алиас для словаря таксономии. Не подскажите как это делается правильно?
Такого пути taxonomy/vocabulary/[vid] в ядре друпала нет, как же сделать алиас в моем случае?

Аватар пользователя kansei kansei 14 октября 2009 в 21:17

penexe wrote:
ну в настройках там можно руками добавить путь

Это понятно, не настолько я глуп Smile Просто как я написал выше пути taxonomy/vocabulary/[vid] нету в друпале и pathauto естественно не принимает такой алиас.

Аватар пользователя penexe penexe 14 октября 2009 в 22:02

kansei wrote:
penexe wrote:
ну в настройках там можно руками добавить путь

Это понятно, не настолько я глуп Smile Просто как я написал выше пути taxonomy/vocabulary/[vid] нету в друпале и pathauto естественно не принимает такой алиас.

а вы какие пути назначили во views для терминов?

Аватар пользователя kansei kansei 14 октября 2009 в 22:34

penexe wrote:
kansei wrote:
penexe wrote:
ну в настройках там можно руками добавить путь

Это понятно, не настолько я глуп Smile Просто как я написал выше пути taxonomy/vocabulary/[vid] нету в друпале и pathauto естественно не принимает такой алиас.

а вы какие пути назначили во views для терминов?

Словарь у меня один Articles, и путь во Views задан как section/articles/%.
Есть авто-алиасы для терминов вида section/[vocab-raw]/[catpath-raw].
В Taxonomy Redirect задан редирект для словаря articles - section/articles/!name

Аватар пользователя kansei kansei 14 октября 2009 в 23:12

Сделал путь без % и в Taxonomy Redirect - section/articles/!tid для словаря. Суммари отображается, все работает, но и пути стали вида section/articles/2, а мне нужно section/articles/novosti.

Update: поменял аргумент обратно на Term и редирект на !name и вроде все работает как надо. Единственно не понял, почему мешала % передача аргумента в путь?

Аватар пользователя kansei kansei 14 октября 2009 в 23:40

Касательно группированного вывода нод по терминам. Я попробовал сделать как вы советовали, и похоже все работает, но есть несколько моментов, которые я хочу изменить. А именно: убрать вывод перед телом каждой ноды термина к которому она привязан. Т.е. выводить только раз перед началом списка нод данного термина.

Спасибо за ваши ответы Smile

Аватар пользователя WiseMan WiseMan 14 октября 2009 в 23:51

Или, вариант еще проще, ИМХО - ставите модуль Taxonomy Views Integrator. Он позволяет для словарей и даже для отдельных терминов делать разные виды. Включаете стандартный вьюз для таксономии, затем экспортируете его, для того чтобы импортировать с нужным именем под нужный словарь (это важно).

Меняете все что вам нужно в выводе вьюса и будет вам счастье. На ура работает с синонимами. В путях вьюса ничего трогать не нужно.

Аватар пользователя kansei kansei 15 октября 2009 в 0:05

С TVI я пробовал, но не вышло. Вернее, можно руками прописывать шаблоны вьюс для каждого словаря и термина, но нужно было автоматизированное решение. Именно этого я не смог добится от TVI.

И еще остро встал вопрос - как оттемизировать вывод после использования во Views шаблоне print node_view($node, TRUE); ? Node-story.tpl.php на него не влияет.

Аватар пользователя kansei kansei 15 октября 2009 в 0:30

penexe wrote:
"kansei" wrote:
node_view($node, TRUE); ? Node-story.tpl.php на него не влияет.

а должен

Очень странно, если должен. По факту devel themer info говорит, что при выводе используется views-view-unformatted.tpl.php.

Аватар пользователя kansei kansei 15 октября 2009 в 0:50

Вернее, там есть views-view-unformatted.tpl.php, а внутри него node.tpl.php. Не понятно почему не используется node-story.tpl.php который присутствует в папке. В чем может быть причина?

Аватар пользователя penexe penexe 15 октября 2009 в 1:11

"kansei" wrote:
Не понятно почему не используется node-story.tpl.php который присутствует в папке. В чем может быть причина?

а просто node.tpl.php в папке лежит?

Аватар пользователя kansei kansei 15 октября 2009 в 1:57

"penexe" wrote:
а просто node.tpl.php в папке лежит?

Уже разобрался, его как раз и не было.

А множественный вывод термина я решил путем такого кода в views-view-unformatted--taxonomy-1--page-2.tpl.php (пхп знаю поверхностно, потому код вероятно страшненький):

<?php global $i$headers?>

<?php if (!empty($title)):?>
  <?php if (sizeof($headers) == || !in_array(strip_tags($title), $headers)): ?>
      <h3><?php print $title ?></h3>
    <?php $headers[$i]=strip_tags($title); $i++; ?> 
  <?php endif; ?>
<?php 
endif; ?>

<?php foreach ($rows as $id => $row): ?>
  <div class="<?php print $classes[$id]; ?>">
    <?php print $row?>
  </div>
<?php endforeach; ?>
Аватар пользователя konopkoman konopkoman 27 октября 2009 в 13:28

А как сделать тоже самое (сабж), если используется Category?
У меня для Category не работает PathAuto — в нём нельзя корректно задать авто-пути для иерархии.
Что делать? Вернуться от Контейнеров и Категорий к Словарям и Терминам?