Вопрос по views

Аватар пользователя Sergey F Sergey F 23 августа в 6:52

Прошу совета, как грамотно сделать. Есть путь:

/Новости/Уфа/Канализация/

Можно создать отдельный views для каждого раздела. Можно создать много страниц внутри одного views. Как грамотно сделать? Спасибо за ваши ответы.

0 Thanks

Комментарии

Аватар пользователя Sergey F Sergey F 23 августа в 8:19

Спасибо за отклик!

Вопрос как правильно сделать? Вывести каждую категорию отдельным представлением, или выводить категории пейджами внутри одного представления? Можно вывести и так и сяк. Но как это сделать разумно. Разумно насоздавать гору пейджей (страниц) внутри одного представления. Или сделать гору представлений для каждой категории. Вот.

Категорий будет много.

Аватар пользователя marassa marassa 23 августа в 8:29
1

Если "Уфа" и "Канализация" - это термины таксономии, а представления для каждого термина одинаковые по структуре, то нужно сделать всего ОДНО представление с контекстным фильтром/фильтрами.

Аватар пользователя Sergey F Sergey F 23 августа в 8:35

Спасибо за отклик.

Хорошо. А если нужно вывести "Уфа" "Дороги"? То создать страницу внутри представления Уфа, или создать отдельное представление "Дороги"? Url соответственно будет /ufa/roads/.

Аватар пользователя marassa marassa 23 августа в 8:39
1
Sergey F wrote:

А если нужно вывести "Уфа" "Дороги"? То создать страницу внутри представления Уфа, или создать отдельное представление "Дороги"?

Ни то, ни другое. Создать ОДНО представление с аргументами "Город" и "Рубрика" (тут Вам виднее как назвать).
PS Создание представления "Уфа" - первый шаг на пути в ад.

Аватар пользователя Sergey F Sergey F 23 августа в 8:49

Ничего не понимаю. Сейчас у меня есть одно представление "Главная страница". Мне нужно вывести урлы:

/ufa/road/
/ufa/trees/

Мне казалось, что нужно создать представления "Уфа" "Дороги" "Деревья". На их основе сформировать меню. Боковое меню выведу блоком и все.

Но внутри настроек представления есть возможность "создать страницу". И сделать тоже самое в одном представлении Уфа.

Аватар пользователя ivnish ivnish 23 августа в 8:50
1

Я видел сайт, где так делали, это было 100500 представлений. Я заменил 100500 представлений на одно. Это ответ на ваш вопрос "как правильно"

Аватар пользователя Sergey F Sergey F 23 августа в 8:54

Вот и я об этом. Чуствую, что не правильно. Решил спросить как правильно. А вы не поделитесь, как вы там решили вопрос с 100500 представлений?

Аватар пользователя Sergey F Sergey F 23 августа в 9:13

Все равно не понятно =(

Зайду я в представление "Главная страница". Настрою контекстный фильтр. Выведется на главной один вид конкретного материала. Ну а дальше как? Все равно надо создавать другое представление "Уфа" и настраивать там критерии фильтрации. Иначе как вывести меню?

Таксономия - набор словарей и терминов. Там структуры, иерархий нет.

Аватар пользователя ivnish ivnish 23 августа в 9:14

Не надо трогать представление главной страницы. Нужно новое создавать

Аватар пользователя Sergey F Sergey F 23 августа в 9:20

Хорошо.
Вот создал я новое представление "Уфа". Настроил его, чтобы выводились ноды связанный с городом Уфа. Сделал пунк меню: /ufa/. Теперь мне нужно сделать подраздел города - дороги. Как мне это сделать? Создать page внутри представления Уфа и настроить там контекстные фильтры, переопределить критерии фильтрации? Так получается?

Аватар пользователя ivnish ivnish 23 августа в 9:24
2

Не нужно представление "Уфа". Представление вообще не должно быть привязано к контекстному фильтру

Я не знаю как объяснить. Смотрите видео по контекстным фильтрам столько раз, пока не наступит просветление. Я именно так и делал

Аватар пользователя marassa marassa 23 августа в 9:27
1
Sergey F wrote:

Вот создал я новое представление "Уфа"

Теперь удалите его. Создайте новое представление "Город". Добавьте контекстный фильтр "Город".
Создайте новое представление "Подраздел города". Добавьте контекстные фильтры "Город" и "Подраздел".

Аватар пользователя Sergey F Sergey F 23 августа в 9:38

Хорошо.
Так это представление будет показывать ноды всех городов... А мне нужно показывать ноды Уфы и чтобы урл был выведен в пункт меню.

Аватар пользователя Sergey F Sergey F 23 августа в 10:02

1. Создаю представление город.
2. Настраиваю контекстыне фильтры чтобы выводились материалы ВСЕХ городов.
3. Настраиваю ссылку /city/

Теперь. Как мне сделать /city/ufa/? Создать page внутри представления Город? И в нем все переопределить как мне надо?

Аватар пользователя Sergey F Sergey F 23 августа в 10:27

Спасибо за отклик.
Так это получится 100500 представлений. И для каждого урла свое представление со своими фильтрами. В треде говорят, что так делать не надо. А как надо - не понятно.

Аватар пользователя Orion76 Orion76 23 августа в 12:38
1

Добавляете словарь таксономии Города(если не добавлен)

"технический" урл термина таксономии: taxonomy/term/<идентификатор термина>
Но все урлы в друпал могут иметь алиасы и даже несколько.
Значит, надо добавить для городов алиасы.

Для этого ставите модуль https://www.drupal.org/project/pathauto
Для словаря Города настраиваите шаблон алиаса, например такой:
city/[taxonomy_term:name]
[taxonomy_term:name] - это токен для подстановки имени термина, список токенов должен быть на странице настройки шаблона.
И генерируете урлы для существующих городов, для новых они будут создаваться автоматически.

Итак, урлы готовы.

Далее нужно меню с этими урлами.
Способов его создать море.
Можно сделать такое меню вьюсом типа блок, или данным модулем:
https://www.drupal.org/project/taxonomy_menu

Далее необходимо создать вьюс с контекстным фильтром типа "страница".
Вьюс делаем по нодам.
урл вьюса: city/%
Добавляем контекстный фильтр: ID термина таксономии(выбираем наименование поля ноды типа Термин таксономии, словаря Города), в настройках фильтра указываем, откуда брать этот ID.
Точно не помню как этот пункт называется, что-то типа: получить ID из урла страницы.
Если нужно будет указать номер секции урла, которая является ID термина, помните, что это работает не с алиасом урла (city/%), а оригиналом (taxonomy/term/ID)
и номером секции будет 2 или 3(непомню, отсчет начинается с 0 или 1)

все, в итоге получается:
1.Меню по городам.
2.При переходе по ссылке меню открывается вьюс, который выводит ноды связанные с текущим городом.

Для фильтрования нод города по рубрике, проще сделать обычный фильтр вьюса в виде меню (есть такие модули на drupal.org, типа такого: https://www.drupal.org/project/better_exposed_filters и т.п.) или тем же блочным вьюсом.

Аватар пользователя Sergey F Sergey F 23 августа в 12:44

Какой кошмар =((((. Это ад. Может я не правильно вопрос задал?

Мне всего лишь надо сделать так:
/city/
/city/ufa/
/city/ufa/trees/

Я вообще не понимаю, как один вьюс сделает мне три таких категории... А если надо создавать три вьюса, то почему не создать их с обычными фильтрами а не динамическими контекстными...

Спасибо за такой большой развернутый ответ.

Аватар пользователя ivnish ivnish 23 августа в 14:18

Категории должны быть сделаны терминами таксономии. Вьюс будет для вывода этих терминов или их содержимого

Аватар пользователя mykola mykola 23 августа в 14:23
1

та здесь человек принял друпал за вордпрес и ищет простое решение. Он не учил друпал и не будет и к програмированию мне кажеться он е имеет отношения. Советовать ему как начинаючему даже разработчику не имеет смысла. Он не только не поймет, а даже разбирать не будет

Сделает свои три view и будет счастлив. И пофиг ему на то что и как правильно, работает и отлично, сам сделал все таки, бесплатно

Аватар пользователя Sergey F Sergey F 23 августа в 14:40

Было бы мне пофиг, на форуме не спрашивал. Я благодарен, что люди уделили время и объяснили, дали пути поиска. Жаль что мне не понятно пока. Но ничего. Разберусь. И да. Друпал сложнее жумлы. Не знаю достоинство это или недостаток.

Аватар пользователя marassa marassa 23 августа в 14:41
mykola wrote:

Он не учил друпал и не будет и к програмированию мне кажеться он е имеет отношения

А тут и не надо ничего программировать, всё делается мышкой за пять минут.

mykola wrote:

Сделает свои три view и будет счастлив

Если их три, то так и надо делать. Но изначально-то утверждалось , что

Категорий будет много

Аватар пользователя Sergey F Sergey F 24 августа в 15:36

УРА!!! Получилось! Прочитал 101 раз ваше сообщение и разобрался как это работает. Вы не наведете на путь, как сделать, чтобы вместо

/city/1/

Можно было указать

/city/ufa/

И ноды вывелись по контекстному фильтру? Облазил все настройки фильтра. Есть опции "Необработанное значение из урл -> использовать синоним пути", но фильр все равно работает только по идентификатору.

Спасибо.

Аватар пользователя marassa marassa 24 августа в 17:30

По ссылке /admin/config/search/path можно указать синоним для любого пути, т.е. /city/1 => /city/ufa или даже просто /ufa . Но опять же вручную это прописывать для каждого города (уж не говоря про каждое сочетание города и рубрики) замучаешься. Для городов можно использовать pathauto (как советовал Orion76). Для всех сочетаний города и рубрики навскидку не знаю, надо думать.

Аватар пользователя Semantics Semantics 24 августа в 18:29

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

Тогда вы можете в термине создать поле, например, slug, писать туда "ufa" и его использовать для урлов

Аватар пользователя Sergey F Sergey F 25 августа в 6:32

Спасибо за отклик.

во-вторых, передавать в качестве аргумента, поле из термина.

Сделал. Работает. Но дублируются ноды почему-то. Вместо двух нод, выводится четыре, две из которых - дубли. Да и способ выглядит как то костыльно.

во-первых, можно передавать имя термина

Тоже сделал. Ноды не дублируются. Но название термина "Уфа". И фильтр срабатывает по адресу "%/Уфа". А должен срабатывать по алиасу "ufa".

Я правильно понимаю, что самый правильный, и без костыльный способ, это руками править синонимы путей? Получается только так.

Аватар пользователя Orion76 Orion76 25 августа в 9:15

При генерации алиасов необходимо транслитилировать кириллические текст в латиницу.
city/Уфа -> city/ufa

Для друпал-семерки нужен был специальный модуль, для drupal 8 данный функционал в ядре:
https://drupal.ru/node/132683

К сожалению, файл скрина с настройками (по указанной выше ссылке) отсутствует, но наверное будет не слишком сложно самому найти данную опцию (включения транслитерации алиасов) в настройках генерации алиасов модуля pathauto.

Аватар пользователя Semantics Semantics 25 августа в 9:52

Я правильно понимаю, что самый правильный, и без костыльный способ, это руками править синонимы путей? Получается только так.

Всё сугубо зависит от количество терминов и возможностей.
С десятком терминов - проще руками добавить алиасы и вообще не думать ни о чём

Аватар пользователя Sergey F Sergey F 26 августа в 16:43

Не знаю. Каждое действие в друпал8 дается с боем и скрипом. Как работать с котекстными фильтрами - уже разобрался. Теперь запнулся об алиасы... Установлен и работает Pathauto, шаблоны такие:
Для материалов:

[node:title]

Для терминов таксономии

[term:parents:join-path]/[term:name]

Алиасы создаются только на английском, транслитерация включена. Но контекстные фильтры работают или по системным путям

"2/3/4/5"

или по именам таксономии кирилическим

"термин1/термин2/термин3/"

Не понимаю, как это должно работать. Если Pathauto создал синонимы, то как то они автоматически должны использоваться в путях, а не руками забирать каждый возможный вариант пути...

Аватар пользователя marassa marassa 26 августа в 19:13

Вопрос 1: Сайт чисто русскоязычный, и все термины создаются только на русском языке? Соответственно алиасы "на английском", а точнее в транслите, взять неоткуда, и они могут только генерироваться из русских, так?
Вопрос 2: А так ли важно как выглядят пути к вьюхам?

Аватар пользователя Sergey F Sergey F 26 августа в 19:23

Сайт чисто русскоязычный?

Да.

алиасы "на английском"

Да. Они генерируются модулем Pathauto из русских имен.

А так ли важно как выглядят пути к вьюхам

Важно, добится простой структуры:

"term-1/term-2/term-3/term-4"

Чтобы навигация была интуитивной. Работали хлебные крошки. Сформировалось простое понятное меню.

Аватар пользователя marassa marassa 26 августа в 19:46
Sergey F wrote:

Важно, добится простой структуры:

"term-1/term-2/term-3/term-4"

Чтобы навигация была интуитивной. Работали хлебные крошки. Сформировалось простое понятное меню.

Пользователи редко заглядывают в адресную строку браузера, а многие даже не подозревают о ее наличии, так что про интуитивную навигацию не очень понятно. Хлебные крошки и меню в любом случае должны формироваться на русском языке и не обязаны строго повторять структуру URL'ов.

Аватар пользователя Sergey F Sergey F 26 августа в 19:53

строго повторять структуру

1. Вот вот. Построить все на контекстных фильтрах. В строке браузера будут или цифры, или кириллица. Хлебных крошек не будет.
2. Сделать 100500 представлений. Будут хлебные крошки, латинские урлы.

Пока искал решения, зашел на страничку никлана. У него цифры ). А ведь он умеет IDE и напильник =).

Аватар пользователя ivnish ivnish 26 августа в 20:14
1

Значит это действительно не так важно и есть более важные вещи, на которые стоит потратить время)

Аватар пользователя Sergey F Sergey F 26 августа в 20:26

На самом деле я очень близко подошел к решению. Сейчас pathauto генерирует алиасы для пути:

/taxonomy/term/%

Мне нужен шаблон pathauto, который сделает алиасы для урлов типа:

/taxonomy/term/%/%

Тогда я буду в дамках )

Аватар пользователя Orion76 Orion76 27 августа в 7:16

/taxonomy/term/%

Это "технический" урл (роут, route) термина таксономии..
Чтобы добавить урл типа

/taxonomy/term/%/%

скорее всего придется код писать или искать какие либо другие "не стандартные способы".

Скорее всего Вам будет проще сделать для городов и категорий один словарь таксономии в 2-3 уровня

Да, 2-3 уровень (категории-подкатегории) для разных городов будут дублироваться, зато не надо будет делать 100500 вьюсов.

Будут работать стандартно хлебные крошки (настроить их для отображения пути для словаря таксономии с иерархией как 2 пальца об...)

И сгенерировать "многоуровневые" алиасы (типа city/город/категория)
будет намного проще.

Еще проще, пока не достигнете нужного дзен-уровня, забить на красивые урлы и сделать "категории" раскрытыми(exposed) фильтрами вьюса.

Аватар пользователя Orion76 Orion76 26 августа в 20:25

Для хлебных крошек куча готовых модулей на орге на любой вкус, разной степени "замороченности" с достаточно широким функционалом.

Аватар пользователя marassa marassa 26 августа в 20:29

PS

Sergey F wrote:

алиасы "на английском"

Да. Они генерируются модулем Pathauto из русских имен.

Неужели прямо из "Деревья" получается "trees", а из "Дороги" - "roads"???