Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Не срабатывает метод Document::addLink(...) canonical в блоге


Recommended Posts

OC 3.0.2.0 "Русская сборка"

Тема "Zemez" с уже встроенным блогом на основе Simple_Blog. (seo_pro включен).

 

Необходимо было прописать в категориях блога тэг "canonical". В категориях\товарах магазина всё прописывается и выводится через стандартный метод document - addLink(...). Например, "$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id']), 'canonical');" в category.php и т.п. Работает. Аналогично выводится и rel="prev/next".

 

С блогом такой вариант не срабатывает. Точнее, оно там как-то наполовину срабатывает - rel="prev/next" выводит, а "canonical" - нет.

Например:

"$this->document->addLink($this->url->link('simple_blog/category', 'simple_blog_category_id=' . $this->request->get['simple_blog_category_id']), 'canonical');" в php-категории блога - не выводит ничего. Однако если написать, скажем, так:

"$this->document->addLink($this->url->link('simple_blog/category', 'simple_blog_category_id=' . $this->request->get['simple_blog_category_id']), 'canonical_');" - оно отлично выводится. Только роботы ПС такой 'canonical_', разумеется, не воспринимают.

 

-

 

Подскажите, пожалуйста, кто сталкивался с такой ситуацией - что может мешать? Почему не срабатывает именно с 'canonical'? Может, где-то что-то конфликтует, как это проверить? Или я что-то не так делаю?

Сделал временный "костыль": echo '<link href="' . $this->url->link('simple_blog/category', 'simple_blog_category_id=' . $this->request->get['simple_blog_category_id']); echo '" rel="canonical" />';

- всё работает, однако выводится оно над <!DOCTYPE html>, что не есть правильно. Попутно ещё вопрос - как это вывести сразу из php в нужное место в DOM?

 

 

Змінено користувачем STh
Надіслати
Поділитися на інших сайтах


1 час назад, STh сказал:

Попутно ещё вопрос - как это вывести сразу из php в нужное место в DOM?

никак.

 

1 час назад, STh сказал:

Подскажите, пожалуйста, кто сталкивался с такой ситуацией - что может мешать? Почему не срабатывает именно с 'canonical'? Может, где-то что-то конфликтует, как это проверить? Или я что-то не так делаю?

может какие-то модификаторы изменяют/удаляют то, что вы добавляете
да куча причин..

Надіслати
Поділитися на інших сайтах

1 час назад, Prooksius сказал:

никак.

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


- насчёт модификаторов. Тут шаблон, причём, довольно сильно переделанный этими Zemez. Поэтому, разумеется, в нём прилично всяких модификаций + штук 40 их же доп. модулей. Собственно, потому и возник вопрос, кто с таким сталкивался - может есть какой проверенный способ, как отследить, где что мешает. Кроме как отключить всё и вернуться к голому ОС (сайт уже наполнен и используется в работе) - т.е. это не вариант.

Надіслати
Поділитися на інших сайтах


Вы правите в контроллере, а вы посмотрите что получается в модифицированном файле этого контроллера после применения модификаторов. Сразу станет понятно что к чему.
Папка над корнем сайта storage/modification/catalog/controller/....

Надіслати
Поділитися на інших сайтах

Что значит не то? Метод addLink - штатный. Ошибок в синтаксисе нет. Этим же методом в НЕ блоговых ресурсах всё отлично я вывел. Да и в блоговых ресурсах этих методом  выводится всё остальное. Не срабатывает только 'canonical' в блоге. При этом ошибок в логах ОС нет. Я даже готов на платную подсказку, если это поможет решить эту проблему. Там всё равно ещё много чего нужны подсказки. Хочется всё-таки обойтись без "костылей", насколько это возможно.

Змінено користувачем STh
Надіслати
Поділитися на інших сайтах


не совсем понимаю, как это посмотреть (не знаю так хорошо OC, как вы). но prev / next нормально отображается. Если prev / next удалить - canonical всё равно не выводится. Если $this->url->link('simple_blog/category', 'simple_blog_category_id=' . $this->request->get['simple_blog_category_id']); присвоить переменную и вывести её print_r - выводится  правильный адрес текущей категории. /system/library/document.php оригинальный.

Надіслати
Поділитися на інших сайтах


Видимо где-то в коде, может в каких-то модулях, тоже вызывается AddLink с данной ссылкой.. И он оверврайтит то что вы делаете в контроллере.

Надіслати
Поділитися на інших сайтах

Возможно. Тоже думал об этом. Есть там такая штуковина, SEO Backpack называется (кто в теме, думаю, знает о чём речь). Полностью от него отказаться нет возможности, оно шло сразу с шаблоном, выводит в нём микроразметку, прописывает нужные meta robots на технических страницах, используется как массовый генератор title\description (ибо в этом шаблоне нет своего генератора). Настройки canonical в нём тоже есть, но они отключены. Все остальные функции тоже отключены (ибо почти всё ненужное, либо стрёмное). За исключением вышеописанного. Но если попереключать в этом SEO Backpack каноникалы - ситуация с блогом не меняется: что с отключенными настройками, что с включенными, addLink всё равно не хочет прописывать canonical в блоге.

 

Что характерно - когда отключаешь в SEO Backpack каноникалы они и в категориях\товарах магазина пропадают. Возможно, дело всё-таки в этом - что с отключенными, что с включенными настройками этот Backpack как-то перехватывает функции AddLink по "канонической части"? А можно ли как-то это проверить, не удаляя его полностью? Ибо как к блокировщику технических страниц от индекса через  meta robots и генератору микроразметки к этому Backpack претензий нет - всё это он делает корректно.

Надіслати
Поділитися на інших сайтах


12 минут назад, STh сказал:

А можно ли как-то это проверить, не удаляя его полностью?

смотреть код файла

Надіслати
Поділитися на інших сайтах

Только что, Prooksius сказал:

Попробуйте прописать в вашем контроллере вызов addLink четко перед этой строкой:

$data['header'] = $this->load->controller('common/header');

 

только что хотел написать тоже самое ))) тоже мысль такая закралась

Надіслати
Поділитися на інших сайтах

там 2 таких блока - для, собственно, категорий блога и для 404-страниц (они у него как бы свои). изначально я этот addLink и прописывал перед блоком $data['header']...['footer'] - т.е. там же, где этот addLink прописан и в магазинных категориях. но, как вы и посоветовали - сейчас вставил конкретно перед $data['header'] = $this->load->controller('common/header');. Ничего не поменялось - также не выводится. Если вставлять перед нижним блоком с $data['header'] = $this->load->controller('common/header');- то не выводится даже prev/next.

Надіслати
Поділитися на інших сайтах


в логах модификаторов, например, есть такая запись:

 

MOD: SEO Backpack
FILE: catalog/controller/startup/seo_url.php
CODE: public function rewrite($link) {
LINE: 74
CODE: $url .= '/' . $query->row['keyword'];
LINE: 89
LINE: 100
CODE: if ($product_info) {
LINE: 210
CODE: $category_info = $this->model_catalog_category->getCategory($category_id);
LINE: 123
CODE: parse_str($url_info['query'], $data);
LINE: 127
CODE: return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query;
LINE: 186
CODE: if (isset($this->request->get['_route_'])) {
LINE: 76
CODE: if ($url) {
LINE: 238
CODE: public function rewrite($link) {
LINE: 152
CODE: public function index() {
LINE: 14
CODE: public function rewrite($link) {
LINE: 181
 

и ещё несколько похожего по seo_url для category, product и manufacturer. Но на сайте включен seo_pro. Для эксперимента я временно вернул оригинальный seo_url.php - ничего не изменилось.

Надіслати
Поділитися на інших сайтах


27 минут назад, STh сказал:

seo_url.php - ничего не изменилось.

дело может быть вообще не в нем - это раз

второе - может вы что то не так делаете

третье - отследить addLink (с этим видно у вас ниче не выйдет)

 

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

Надіслати
Поділитися на інших сайтах

  • 2 weeks later...

 

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

Надіслати
Поділитися на інших сайтах


1 час назад, STh сказал:

Нужно  конкретный пошаговый и подробный алгоритм, типа: берём такой-то файл, прописываем в нём то-то и то-то, смотрим на вывод, если там то-то и то-то, то значит идём к след. файлу, иначе - пишем то-то то-то туда-то туда-то и т.п.

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

Надіслати
Поділитися на інших сайтах


1 час назад, STh сказал:

Нужно  конкретный пошаговый и подробный алгоритм, типа: берём такой-то файл, прописываем в нём то-то и то-то, смотрим на вывод

А как определить какой файл брать? Вы могли поставить тысячи вариантов модулей (возможно косячных, возможно не совместимых друг с другом), которые могут привести к такой ситуации.
Можете кинуть доступы к сайту в личку, посмотрю, если еще актуально..

  • +1 1
Надіслати
Поділитися на інших сайтах

Да, пожалуйста - всё актуально. Основной сайт - https://nspvip.com . Я сделал его полную копию на .RU-домене, чтобы было удобнее ковырять. Отписал вам в личные. Если ещё кто желает помочь - пишите.

Надіслати
Поділитися на інших сайтах


РЕШЕНО.

Спасибо за помощь@Prooksius . Ранее я полностью удалял этот SEO Backpack на тестовом сайте - каноникалы везде восстанавливались штатные (если они были прописаны в файлах шаблона ОС). Другое дело, что создателями сайта этот SEO Backpack был изначально предустановлен, т.к. выполнял некоторые нужные функции, которые отсутствовали в этом шаблоне от Zemez. Так что просто так удалить его я не мог. Пришлось дорабатывать. В этом SEO Backpack и других, более мелких косяков было предостаточно. Некоторые из них были мною исправлены. Т.к. это всё же было проще, чем переделывать\делать заново недостающий функционал шаблона.

 

Но насчёт его непродуманности - полностью согласен. Это ещё мягко сказано. Так что лучше не ставьте этот модуль вообще. Где-то здесь на форуме уже была тема, где этот модуль обсуждался - гадость ещё та. С другой стороны, если бы на сайте не было Simple-блога, то и этой проблемы бы не было :). Хотя этот SimpleBlog - отдельная головная боль... Но, как говорится, иногда выбирать не приходится.

Надіслати
Поділитися на інших сайтах


Шаблон - головная боль

Модуль  в составе - головная боль

Блог - отдельная головная боль...

А зачем тогда это всё ? 

Самобичевание?

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.