Переключатель языка и меню.

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

Аватар пользователя tanatolii1 tanatolii1 18 января 2022 в 15:20

Всем привет, вот уже два месяца как я пытаюсь запустить сайт на друпале)) и накопилось несколько вопросов касающиеся пункта меню.

1) Вступление: изначально, при создании меню была проблема с отображение дочерних элементов. Они вовсе не хотели отображаться и не было их в элемент инспекторе. Было решено установить Superfish. Вроде работает, но немного грязная верстка, т.к. он добавляет некоторые свои части. Так вот, сегодня я беру и добавляю меню стандартное, и оно начинает отображаться, но как оказалось дочерние элементы не прорисуются, если в меню родителю не указать, чтоб список был раскрытым. Собственно, думаю, проблем нет. Будет раскрытым, а я уже так доиграюсь с твиг файлом немного. Но откуда не понятно ul ребенка имеет style='display: block', оно было бы логичным если бы этот стиль передался через аргументы, на которые можно повлиять, но в твиг файле видно, что если это дочерний элемент, тогда "ul" без каких либо классов и стилей.

ВОПРОС: как можно решить проблему с нормальным отображением пункта меню. Готовая верстка с рабочим меню имеется и работает. Но вот не понятно как мне нужно скрывать дочерние элементы меню, если жестко прописано display: block и самое главное, где прописан?

2) В силу того, что мне нужно было сделать сайт на нескольких языках было решено не переводить меню, а сделать для каждого языка свое меню, чтоб можно было для них и ссылки делать разными, т.к. url на переводы не делятся.
Добавил я блок переключателя языка, но вот вопрос, можно ли сделать его частью меню. Каким-то образом добавить, чтоб он выглядел также как меню. Ранее был скачан плагин "Language Switcher Menu" и он работает, но почему-то только для одного меню. Некак тотже RU отобразить на всех трех меню.

Помогите пожалуйста с проблемами описанными выше. Уже запарился искать решение Smile
Спасибо!

Комментарии

Аватар пользователя artomas artomas 18 января 2022 в 17:14

Или я чего-то не понял все-таки, или вам нужно просто выставить соответствующие языки в каждом меню. После этого при смене языка должно активироваться меню, которое имеет этот зык.

Аватар пользователя tanatolii1 tanatolii1 18 января 2022 в 18:00

artomas wrote:
Или я чего-то не понял все-таки, или вам нужно просто выставить соответствующие языки в каждом меню. После этого при смене языка должно активироваться меню, которое имеет этот зык.

проблема в том, что добавив языки как обычный пункт меню, мне нужно указать ссылку. К примеру, я нахочусь сейчас по ссылке https://site.test/en/vps - при нажатии на RU меня должно перекинуть на русскоязычную версию https://site.test/ru/vps. Каким образом я могу прописать ссылку для смены языка, если не знаю где нахожусь.

Аватар пользователя artomas artomas 18 января 2022 в 18:06

Дык это же стандартный суффикс пути. Поставьте вот это https://www.drupal.org/project/lang_dropdown, работает отлично, пользуюсь только им. Были на странице VPS, после переключения на ней же и остаетесь, просто подтягивается перевод материала.

Аватар пользователя tanatolii1 tanatolii1 18 января 2022 в 18:08

artomas wrote:
Дык это же стандартный суффикс пути. Поставьте вот это https://www.drupal.org/project/lang_dropdown, работает отлично, пользуюсь только им. Были на странице VPS, после переключения на ней же и остаетесь, просто подтягивается перевод материала.

Это я ставил, его сложно переделать и интегрировать в мое меню. Так а как указать в ссылке суффикс пути? такое возможно? Мне только это и нужно сделать, если такое возможно вообще.

Аватар пользователя marassa marassa 18 января 2022 в 18:10

tanatolii1 wrote: В силу того, что мне нужно было сделать сайт на нескольких языках было решено не переводить меню, а сделать для каждого языка свое меню, чтоб можно было для них и ссылки делать разными, т.к. url на переводы не делятся

tanatolii1 wrote:Добавил я блок переключателя языка, но вот вопрос, можно ли сделать его частью меню

В Друпале реализация многоязычности, пожалуй, "лучшая в классе". Зачем Вы пытаетесь изобрести какой-то ацкий велосипед на квадратных колесах, вместо того, чтобы разобраться и сделать нормально?

Аватар пользователя tanatolii1 tanatolii1 18 января 2022 в 18:13

marassa wrote:
tanatolii1 wrote: В силу того, что мне нужно было сделать сайт на нескольких языках было решено не переводить меню, а сделать для каждого языка свое меню, чтоб можно было для них и ссылки делать разными, т.к. url на переводы не делятся

tanatolii1 wrote:Добавил я блок переключателя языка, но вот вопрос, можно ли сделать его частью меню

В Друпале реализация многоязычности, пожалуй, "лучшая

я поэтому и прошу помощи, хочу, чтоб было правильно но как правильно не понятно? По документации рекомендуют для каждого языка сделать свое меню - разве это не правильно?

Аватар пользователя tanatolii1 tanatolii1 18 января 2022 в 18:19


Мне нужно для каждого языка использовать разную ссылку.
Перевод не поддерживает использовать разные ссылки для разных языков.

Аватар пользователя artomas artomas 18 января 2022 в 18:32

Я вижу только вариант, который написал первым: создавайте меню для каждого языка, пишите в него ссылки разные, суффикс, как понимаю, тупо нужно также в эти ссылки прописать. Иного решения в голову пока не приходит.

Аватар пользователя tanatolii1 tanatolii1 18 января 2022 в 18:30

переводом подобное сделать сложнее. Поэтому и сделано было для каждого языка свое меню. Не понимаю, почему это не правильно если честно. И как все же быть с суффиксами, решают же люди данную проблему как-то

Аватар пользователя gun_dose gun_dose 18 января 2022 в 20:13
1

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

Аватар пользователя artomas artomas 18 января 2022 в 20:17

И где это ссылке в ядре можно добавить язык? Именно ссылке, а не всему меню. Можно контрибом добавить такую возможность, но из коробки нет такой возможности. Перевод пункта можно добавить, а линк общий.

Аватар пользователя gun_dose gun_dose 18 января 2022 в 21:10

Когда добавляешь пункт меню, указываешь язык для него и он переводится полностью, как любая другая сущность. В итоге, если, к примеру, в меню 5 пунктов и они все переведены на 2 языка, то в админке в меню будет 10 пунктов.

Аватар пользователя artomas artomas 18 января 2022 в 21:12

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

Аватар пользователя artomas artomas 18 января 2022 в 21:19

Разные ссылки -- речь про суффиксы опять же??? Если нет, то нет варианта из коробки подменить сам линк.

Аватар пользователя artomas artomas 18 января 2022 в 22:00

Опишите принцип кратко. В коробке нельзя дать другой линк в переводе. Нужен контриб для этого. Либо мы все-таки о разном вообще говорим. Либо я вообще ничего не знаю про переводы Друпала))) Буду рад просвещению, хотя делал и правильным, и кривым способом мультиязычность.

Аватар пользователя marassa marassa 18 января 2022 в 22:34
gun_dose wrote: Когда добавляешь пункт меню, указываешь язык для него и он переводится полностью, как любая другая сущность. В итоге, если, к примеру, в меню 5 пунктов и они все переведены на 2 языка, то в админке в меню будет 10 пунктов.

А зачем так делать-то? А если языков - десять, то будет 50 пунктов? И как в этой каше потом разбираться?
У меня например все ссылки заданы как "All languages", переводится только сам текст, ссылка типа /node/XXX задаётся один раз, языковые префиксы подставляются автоматически.


Аватар пользователя artomas artomas 18 января 2022 в 23:14

Все верно относительно меню, по правилам. Только вот задача другая. И решения для нее нет стандартными средствами ядра. НЕЛЬЗЯ дать ссылку меню иную: написано же "all languages". И нельзя в ядре для каждой ссылки создать отдельный путь. Если кто-то ткнет меня носом, как это реализовать, буду только рад)))

Аватар пользователя gun_dose gun_dose 19 января 2022 в 0:34

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

Но у меня другой вопрос: а почему бы тогда не задавать нодам на разных языках разные алиасы? Это же полностью решает проблему.

Аватар пользователя marassa marassa 19 января 2022 в 14:44

А линк меню, один для всех языков, вводится как /node/xxx. Но таким его видит только админ в админке. Юзеры видят только алиасы, которые могут генериться разные для разных языков (если нужно).

Аватар пользователя artomas artomas 19 января 2022 в 14:47

Получается решение такое: 1) для перевода свой алиас ноды, 2) а в меню общий линк на номер ноды просто, 3) после перехода срабатывает алиас. Так предлагаете?

Аватар пользователя marassa marassa 19 января 2022 в 14:53

1 и 2 верно, а в 3 нет необходимости: несмотря на то, что в меню указан путь /node/xxx, ссылка генерится Друпалом уже на алиас для соответствующего языка, так что никакого редиректа и нет. Возможно где-то в настройках Pathauto раз и навсегда настраивается, что именно алиас является каноническим путем. Сейчас точно не помню, а проверять с телефона сейчас не с руки.

Аватар пользователя tanatolii1 tanatolii1 18 января 2022 в 18:39

artomas wrote:
Я вижу только вариант, который написал первым: создавайте меню для каждого языка, пишите в него ссылки разные, суффикс, как понимаю, тупо нужно также в эти ссылки прописать. Иного решения в голову пока не приходит.

не понимаю как.
Представим, что у меня есть 3 страницы:
1)site.test/ru/vps
2)site.test/ru/vydelenii-server-evropa
3)site.test/ru/ssilka-liubaia
Главная страница на русском у меня выглядит таким образом - site.test/ru

В пункте меню у меня есть возможность нажать на en. Если я нахожусь на страничке 1)мне нужно прописать ссылку /en/vps и для каждой страницы соответственно.Но так же ведь нельзя делать. У меня одно меню к примеру и одна ссылка en. Как я могу ей прописать ссылку типа - /en/[наше местоположение]

Аватар пользователя artomas artomas 18 января 2022 в 18:42

Никак. При нажатии на en кинет на главную на англ. При нажатии на ссылку меню site.test/en/vps кинет на англ версию ВПС. А вот меню появится на том языке, который указан в суффиксе вашими руками.

Аватар пользователя tanatolii1 tanatolii1 18 января 2022 в 18:46

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

Аватар пользователя artomas artomas 18 января 2022 в 18:49

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

Аватар пользователя tanatolii1 tanatolii1 18 января 2022 в 18:52

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

Аватар пользователя tanatolii1 tanatolii1 18 января 2022 в 18:53

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

Аватар пользователя marassa marassa 18 января 2022 в 20:07

tanatolii1 wrote: По документации рекомендуют для каждого языка сделать свое меню - разве это не правильно?

В какой документации рекомендуют такой бред?

tanatolii1 wrote: Мне нужно для каждого языка использовать разную ссылку.

Она и будет своя - с разными префиксами языков.

tanatolii1 wrote: Пример:
RU: /vydelenii-server-evropa
EN: /dedicated-server-evropa

Это неправильно. Должно быть так:
EN: /en/dedicated-server-evropa
RU: /ru/dedicated-server-evropa
или
RU: /ru/vydelenii-server-evropa
Для языка по умолчанию префикс можно опустить.

tanatolii1 wrote: В пункте меню у меня есть возможность нажать на en

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

Аватар пользователя marassa marassa 19 января 2022 в 6:03

artomas wrote: Только вот задача другая

Так задача неправильная. И автор спрашивал как правильно. И наша цель - помочь заложить правильный фундамент, а не помогать красить кривую текущую крышу Wink

Аватар пользователя marassa marassa 19 января 2022 в 6:08

gun_dose wrote: а почему бы тогда не задавать нодам на разных языках разные алиасы?

Так ничто не мешает, даже автоматически из тайтлов по паттерну. Лично меня тошнит от "vydelenii-server-evropa", но если очень хочется, то пожалуйста. А в меню для всех языков будет одна и та же ссылка /node/1656. И никто ее в таком виде не увидит кроме админа.

Аватар пользователя tanatolii1 tanatolii1 19 января 2022 в 10:49

marassa wrote:
artomas wrote: Только вот задача другая
Так задача неправильная. И автор спрашивал как правильно. И наша цель - помочь заложить правильный фундамент, а не помогать красить кривую текущую крышу

да, это я уже понял))) Спасибо за помощь. Но вот как стилизовать переключатель языков не могу понять(( мне нужно меню и этот переключатель обернуть к примеру в один div, а переключатель вообще выглядит как список. Допустим я буду использовать готовый модуль Language Switcher Dropdown, но и его мне нужно как-то запихнуть в один div с кодом меню. Где то я затупил)) и никак не могу выехать с этим переключателем языка.

Аватар пользователя gun_dose gun_dose 19 января 2022 в 11:16

Можно накинуть свой шаблон и на блок с переключателем и на сам список со ссылками языка. Language Switcher Dropdown хорош, если его вид и поведение полностью устраивают. Если же надо что-то сильно отличающееся, то проще самому темизировать.

Аватар пользователя marassa marassa 19 января 2022 в 11:07

tanatolii1 wrote: как стилизовать переключатель языков не могу понять

Через css - как еще?

tanatolii1 wrote: мне нужно меню и этот переключатель обернуть к примеру в один div

Не очень понятно зачем, но если очень-очень нужно, то можно как вариант создать под это дело отдельный регион, и в него поместить два блока - с меню и с переключателем языков. Регион и будет этим объединяющим div'ом, а в его шаблоне можно нужные классы навесить.

Аватар пользователя tanatolii1 tanatolii1 19 января 2022 в 11:21

marassa wrote:
tanatolii1 wrote: как стилизовать переключатель языков не могу понять
Через css - как еще?
tanatolii1 wrote: мне нужно меню и этот переключатель обернуть к примеру в один div
Не очень понятно зачем, но если очень-очень нужно, то можно как вариант создать под это дело отдельный регион, и в него поместить два блока - с меню и с переключателем языков. Регион и будет этим объединяющим div'ом, а

У меня готовая верстка есть, не хочу ее менять, поэтому стараюсь ее максимально повторить. Если не сделаю так, начнет плыть и мобильная версия, меню не будет скрытым и все такое. Точно, отдельный регион.

Аватар пользователя tanatolii1 tanatolii1 19 января 2022 в 11:22

gun_dose wrote:
Можно накинуть свой шаблон и на блок с переключателем и на сам список со ссылками языка. Language Switcher Dropdown хорош, если его вид и поведение полностью устраивают. Если же надо что-то сильно отличающееся, то проще самому темизировать.

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

Аватар пользователя tanatolii1 tanatolii1 19 января 2022 в 11:30

marassa wrote:
tanatolii1 wrote: как стилизовать переключатель языков не могу понять
Через css - как еще?
tanatolii1 wrote: мне нужно меню и этот переключатель обернуть к примеру в один div
Не очень понятно зачем, но если очень-очень нужно, то можно как вариант создать под это дело отдельный регион, и в него поместить два блока - с меню и с переключателем языков. Регион и будет этим объединяющим div'ом, а

у меня есть регион - header. В него входит лого, меню и переключатель языков. Судя по всему уже будет не просто добавить еще один регион. Все три элемента шапки находятся внутри нужного мне id и дива региона. И вот в него если бы можно было вставить еще один регион)))) но такое невозможно. Проще действительно подправить уже верстку.