Создание компонента для создания карты сайта (sitemap.xml)

#1 8 декабря 2021 в 13:39

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

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

Вообщем, пройда краткий курс, по генерации компонета https://www.youtube.com/watch?v=1QzpEnPwjwY, понял как добавлять ссылки в базу. 

2. Взаимодействие с контроллером sitemap.

В контроллер по адресу \system\controllers\sitemap, в разделе «Источники ссылок», должен появиться мой контроллер. Вот тут уже не понятно.

3. Генерирование карты сайта компонента, ссылка на которую будет в списке ссылок, сгенерированных компонентом sitemap по адресу мойсайт.ру/sitemap.xml

Вообще не понятно.

 

Может кто-нибудь подскажет, как решить?

#2 8 декабря 2021 в 14:00

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

Vladimir

А зачем? Вы хотите заменить родную вашей?

#3 8 декабря 2021 в 14:08

А зачем? Вы хотите заменить родную вашей?

Lora

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

#4 8 декабря 2021 в 14:27

Посмотрите, как сделано в контроллерах в движке. Как пример контроллер photos или frontpage.

Нужно два хука:

  1. sitemap_sources
  2. sitemap_urls

sitemap_sources — отвечает за список в настройках. Примеры тут или тут.

sitemap_urls возвращает непосредственно ссылки для сайтмапа. Примеры тут или тут.

#5 8 декабря 2021 в 14:28

Я же написал всё подробно.

Vladimir

Подробно о чём? О том, что вам только понятно? 

Я хочу произвольные ссылки в карту сайта добавлять

Vladimir

Тогда зачем вам компонент? Используйте события.

#6 8 декабря 2021 в 19:46

Тогда зачем вам компонент? Используйте события.

Lora

Что это значит? Как события использовать?

Добавлено спустя Только что

Посмотрите, как сделано в контроллерах в движке. Как пример контроллер photos или frontpage.

Нужно два хука:

  1. sitemap_sources
  2. sitemap_urls

sitemap_sources — отвечает за список в настройках. Примеры тут или тут.

sitemap_urls возвращает непосредственно ссылки для сайтмапа. Примеры тут или тут.

Fuze

Спасибо! Попробую.

Добавлено спустя 5 часов

Создал хук, за основу взял photos, но что-то не сработало, я как понимаю, после добавления хука sitemap_sources.php в свой компонент, в настройках компонента «Генератор карты сайта и robots.txt» в разделе «Источники ссылок», должен появиться мой компонент, но он не появился.  Или ещё что-то нужно сделать чтобы хук активировать? Код хука sitemap_sources.php:

  1. <?php
  2.  
  3. class onMysitemapSitemapSources extends cmsAction {
  4.  
  5. public function run(){
  6.  
  7. return array(
  8. 'name' => $this->name,
  9. 'sources' => array(
  10. 'mysitemap' => LANG_MYSITEMAP_CONTROLLER
  11. )
  12. );
  13.  
  14. }
  15.  
  16. }

 

#7 8 декабря 2021 в 19:56

Вы сами понимаете, что делаете? Это риторический вопрос)))

#8 8 декабря 2021 в 20:40

Вы сами понимаете, что делаете? Это риторический вопрос)))

Lora

Третье сообщение риторите ради риторических вопросов))) ...  Если что-то по делу можете сказать, скажите пожалуйста.

Хук sitemap_sources.php  в файле manifest.php не прописал сразу, после того как прописал, появилось событие, его добавил и в настройках компонента «Генератор карты сайта и robots.txt» в разделе «Источники ссылок» компонент появился. Но ссылка на карту сайта компонента не генерируются здесь мойсайт.ру/sitemap.xml. Даже если в хуке sitemap_urls.php что-то не так прописал, вроде ссылка должна появиться. Хук sitemap_urls.php с таким кодом:

  1. <?php
  2.  
  3. class onMysitemapSitemapUrls extends cmsAction {
  4.  
  5. public function run($type){
  6.  
  7. $urls = array();
  8.  
  9. if ($type != 'link') { return $urls; }
  10.  
  11. $links = $this->model->limit(false)->getLinks(0, false, array('link'));
  12.  
  13. if ($links){
  14. foreach($links as $link){
  15. $urls[] = array(
  16. 'url' => href_to_abs($this->name, $link['link'].'.html')
  17. );
  18. }
  19. }
  20.  
  21. return $urls;
  22.  
  23. }
  24.  
  25. }
  26.  
#9 8 декабря 2021 в 20:54

Создал хук,..., но что-то не сработало

Vladimir

После создания файлов, надо обновить события в админке — компоненты — управление событиями.

компонент появился. Но ссылка на карту сайта компонента не генерируются

Vladimir

И не будет. Начнем с этого

  1. if ($type != 'link') { return $urls; }

Какой $type вы передаете? И передаёте ли?

Затем это

  1. $links = $this->model->limit(false)->getLinks(0, false, array('link'));

В модели компонента photos есть такой метод getLinks. А в модели вашего компонента есть он?

#10 9 декабря 2021 в 00:19

Если что-то по делу можете сказать, скажите пожалуйста.

Vladimir

По какому делу? Я по делу и написал, что компонент вам не нужен,  а нужно событие, о чём вам админ и разжевал. Но если вы не понимаете, что такое событие и выкладываете непонятный код, то  что кроме риторики ожидаете? Хотя бы документацию почитали о событиях. Вы пытаетесь методом тыка сделать  то, что не сделаешь этим методом. А второй ваш код ещё хуже первого. Если вы хотите разобраться, значит начинайте  с самого начала. С основ языка. Параллельно читайте доки системы. А если хотите собрать код из ответов на ваши сообщения, то это зря. Не получится у вас. Так как вы не понимаете, что делаете. Начните с чего то попроще.

#11 9 декабря 2021 в 13:44

Какой $type вы передаете? И передаёте ли?

Loadырь

Удалил переменную $type

В модели компонента photos есть такой метод getLinks. А в модели вашего компонента есть он?

Loadырь

Да есть,

  1. public function getLinks(){
  2. return $this->get('mysitemap_links');
  3. }

 

Вообщем доделал компонент, ещё там кое-какие моменты добавил, там по выбору даты, заголовка. 

Спасибо Loadырь!!! Спасибо Fuze!!!

Компонент выложил в блог https://instantcms.ru/blogs/dobavit-svoi-ssylki-v-sitemap.html

P.S. Специально для надменного риторика. Получилось.

#12 21 декабря 2021 в 11:02

Вот прошло 12 дней с момента создания компонента. Почти сразу добавил свои ссылки и добавил новую карту в вебмастера яндекс и гугла. Яндекс проиндексировал ссылки, их пока особо в поиске не видно, но как минимум в индексе они есть. Гугл не хочет. Думаю что за на..,… так вот при проверке страниц в google search console, выяснилось что они каноничные, цитирую:

Каноническая страница, выбранная Google: Совпадает с канонической страницей, выбранной пользователем

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

Конечно можно просто в файле /system/controllers/content/actions/category_view.php закомментировать 122 строку:

  1. $this->cms_template->addHead('<link rel="canonical" href="' . $this->cms_config->host . (is_array($page_url) ? $page_url['base'] : $page_url) . '"/>');

 Но потом же будут обновления, вспоминать что её закомментировал… вообщем неудобно...

При том это не совсем корректно, каноничность нужна как минимум для отображения на разных страницах категории (2, 3 и.т.д.).

Вообщем вопрос как убрать каноничность, только на страницах фильтра?

#13 21 декабря 2021 в 12:45

P.S. Специально для надменного риторика. Получилось.

Vladimir

Знаете для чего щука в пруду? 😁

Хорошо, что что то получилось. Плохо, что сами не понимаете, что написали. Иначе последнего вопроса бы не было.

#14 21 декабря 2021 в 14:40

P.S. Специально для надменного риторика. Получилось.

Vladimir

Знаете для чего щука в пруду? 😁

Хорошо, что что то получилось. Плохо, что сами не понимаете, что написали. Иначе последнего вопроса бы не было.

Lora

12 дней человек ответ рожал и снова не в тему. Для чего? Может решение дадите раз такой умный?

#15 21 декабря 2021 в 14:51

Неее).  Грубиянов не люблю. Да и на глупость у меня аллергия.

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.