Автор Тема: Проблема со ссылками  (Прочитано 27 раз)

23 Июль 2017, 13:16:19
  • Новичок
  • *
  • Сообщений: 34
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всем доброго здравия.

Подскажите, пожалуйста, знающие люди, по проблеме со ссылками.
У меня имеется в меню ссылки на две страницы. Одна из них - cms page, другая - страница темы.

Настройки по умолчанию, они таковы:
в разделе Preferences → SEO & URLs в блоке "Schema of URLs"
Route to CMS page стоит:
content/{id}-{rewrite}

На сайте ссылка на cms page выглядит как http://mysite.ru/en/content/6-testmt1
и она работает.

Вторая страница называется contact us,  она настраивается в блоке "SEO & URLs"

На сайте ссылка на эту страницу выглядит как http://mysite.ru/en/contact-us
и она тоже работает.

Однако, если сначала перейти на мою cms page по ссылке http://mysite.ru/en/content/6-testmt1
то в меню в шапке будет видно, что ссылка на страницу contact us уже изменилась, она стала http://mysite.ru/en/content/contact-us и соответственно при нажатии выдаёт 404, т.к. это ссылка некорректная. (из-за лишнего /content/)

Что происходит?  :o


23 Июль 2017, 15:11:48
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 86505
  • Репутация: +25418/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Сылка вида http://mysite.ru/lang/content/... - это страницы CMS.
Для страниц сайта ссылки без слова "content", например, для страницы контакты -  http://mysite.ru/lang/contact-us
У Вас в модуле меню неправильно определены ссылки, нужно чтобы url был полный. Проверьте как в модуле выводятся ссвлки в шаблоне.
23 Июль 2017, 18:40:13
Ответ #2
  • Новичок
  • *
  • Сообщений: 34
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Чё-то не могу понять, не посмотрите?
файл в прикреплении.

Как я понимаю, актуальный для меня вывод меню - 545-546 строки:
$output .= '<li class="'.$menu['menu_class'].'" '.$this->renderAttrs($menu).'>
<a href="'.$this->getLink($menu).'" target="'.$menu['target'].'" class="has-category">';

Откуда понять как он там ссылки делает - хз.. я бы уже даже чтобы решить проблему поскорее - захардкодил как-нить так:

if (strpos($this->getLink($menu), 'contact-us')  !== false ) {
$mylink = str_replace("/content","",$this->getLink($menu));
$output .= '<li class="'.$menu['menu_class'].'" '.$this->renderAttrs($menu).'>
<a href="'.$mylink.'" target="'.$menu['target'].'" class="has-category">';
}else{
$output .= '<li class="'.$menu['menu_class'].'" '.$this->renderAttrs($menu).'>
<a href="'.$this->getLink($menu).'" target="'.$menu['target'].'" class="has-category">';
}
Но это почему-то ничего не даёт...
23 Июль 2017, 19:11:00
Ответ #3
  • Новичок
  • *
  • Сообщений: 34
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Блин...
перед этим всем я вставил:
echo $this->getLink($menu);и ужаснулся. вывел он вот что:
http://mysite.ru/en/http://mysite.ru/en/12-testcat1http://mysite.ru/en/content/6-testmt1contact-usblog.htmlhttp://mysite.ru/en/http://mysite.ru/en/12-testcat1http://mysite.ru/en/content/6-testmt1contact-usblog.htmlпрямо вот так вот одной строкой. Да ещё и дважды почему-то.
Зато видно, что ссылки, которые не являюся cms page - действительно не полные. Где это настраивать - хз, пока сделал такой хардкод, работает.
if (strpos($this->getLink($menu), 'contact-us') !== false) {
$mylink = str_replace("contact-us","http://mysite.ru/en/contact-us",$this->getLink($menu));
$output .= '<li class="'.$menu['menu_class'].'" '.$this->renderAttrs($menu).'>
<a href="'.$mylink.'" target="'.$menu['target'].'" class="has-category">';
}else{
$output .= '<li class="'.$menu['menu_class'].'" '.$this->renderAttrs($menu).'>
<a href="'.$this->getLink($menu).'" target="'.$menu['target'].'" class="has-category">';
}