CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Карта сайта
Официальный форум Eleanor CMS » Поддержка пользователей системы Eleanor CMS » Первые шаги
Maximkaboom
Ну, продолжая тему, интеграции сторонних модулей в CMS. Подскажите, как сделать так, чтобы создавалась карта сайта моего модуля:

Цитата
<url>
<loc>
http://dream-cs.ru/
</loc>
<lastmod>
2010-03-20
</lastmod>
<changefreq>
daily
</changefreq>
<priority>
1.0
</priority>
</url>
<url>
<loc>
http://dream-cs.ru/server-1
</loc>
<changefreq>
never
</changefreq>
<priority>
0.5
</priority>
</url>
<url>
<loc>
http://dream-cs.ru/cs
</loc>
<changefreq>
always
</changefreq>
<priority>
0.7
</priority>
</url>





Как я понял, это нужно описать в plugins.php, но сам допереть не могу
Alexander
Все достаточно прозрачно. Для примера возьмем файл plugins.php от модуля static. (Сам файл plugins.php необходимо подключить в интерфейсе управления модулем Админка -> Управление модулями -> Правка модуля -> файл плагина).

Интересующие нас строки:

		static $abilities=array(
									&#039;sitemap&#039;,
		);

Это ознчает, что модуль может генерировать карту сайта.

		public function DoSitemap($per_time,$sdata)
		{
			if(!$sdata)
				$sdata=array(&#039;offset&#039;=>0);
			$this->Mainclass->LoadOptions(&#039;module_static&#039;,false);
			$result=$this->Mainclass->Db->Query(&#039;SELECT `url` FROM `f_static` LIMIT &#039;.$sdata[&#039;offset&#039;].&#039;,&#039;.$per_time,__file__,__line__);
			$sdata[&#039;offset&#039;]+=$this->Mainclass->Db->Num_rows();
			$this->Url=&$this->Mainclass->SUrl;
			while($arr=$this->Mainclass->Db->Fetch_assoc($result))
				Sitemap($this->Mainclass->SUrl->ConstructUrl(array(&#039;doc&#039;=>$arr[&#039;url&#039;])),&#039;&#039;,&#039;monthly&#039;,0.5);
			return $sdata;
		}

Сама функция генерации карты сайта. Поясню детали. Функция получает на входе два параметра: $per_time - сколько ссылок разрешено сгенерировать за один вызов функции (после того, скрипт самоперезагружается и функция вызывается еще раз). $sdata - данные, возвращенные этой же функцией прошлый раз (зачем это надо, лучше всего посмотреть в модулях новости и файлы). Функция должна вызвать Sitemap() с тремя параметрами: ссылка, скорость обновления информации поисковиками, приоритет. Если функция ни раз не вызывала Sitemap(), считается, что все возможные URL уже сгенерированы и управление передается следующему модулю.
Maximkaboom
Alexander, сделал так:

   
Цитата
 static $abilities=array(
                                    'sitemap',
        );
        
        public function DoSitemap($per_time,$sdata)
        {
            if(!$sdata)
                $sdata=array('offset'=>0);
            $this->Mainclass->LoadOptions('module_server',false);
            $result=$this->Mainclass->Db->Query('SELECT `server_id` FROM `f_servers` LIMIT '.$sdata['offset'].','.$per_time,__file__,__line__);
            $sdata['offset']+=$this->Mainclass->Db->Num_rows();
            $this->Url=&$this->Mainclass->SUrl;
            while($arr=$this->Mainclass->Db->Fetch_assoc($result))
                Sitemap($this->Mainclass->SUrl->ConstructUrl(array('doc'=>$arr['server_id'])),'','monthly',0.5);
            return $sdata;
        }

В админке получаю:
Parse error: syntax error, unexpected T_PUBLIC in /home/xxxxxxxxx/public_html/modules/monitoring/plugins.php on line 10
Maximkaboom
 C этим отбой=) догадался сам=)




Но вот проблема:

При добавлении в файле sitemap получаються вот такие ссылки:

[url]http://dream-cs.ru/server/425.php[/url]


Как сделать, чтобы ссылки были такого вида:

[url]http://dream-cs.ru/server-425[/url]
Maximkaboom
 Сделал вот так:

public function DoSitemap($per_time,$sdata)
		{
		global $Mainclass;
			if(!$sdata)
				$sdata=array(&#039;offset&#039;=>0);
			$this->Mainclass->LoadOptions(&#039;module_server&#039;,false);
			$result=$this->Mainclass->Db->Query(&#039;SELECT `server_id` FROM `f_servers` LIMIT &#039;.$sdata[&#039;offset&#039;].&#039;,&#039;.$per_time,__file__,__line__);
			$sdata[&#039;offset&#039;]+=$this->Mainclass->Db->Num_rows();
			$this->Url=$this->Mainclass->SUrl;
			while($arr=$this->Mainclass->Db->Fetch_assoc($result))
				Sitemap($Mainclass->Url->ConstructUrl(array(&#039;doc&#039;=>&#039;server-&#039;.$arr[&#039;server_id&#039;])),&#039;&#039;,&#039;always&#039;,0.5);
			return $sdata;
}





Начал делать ссылки вида:

[url]http://dream-cs.ru/admin.php?section=management&key=0262a6e2e717e0716d4fd6b35ed6472c&module=sitemap&doc=server-291[/url]
 
Maximkaboom
 Все, справился сам=) сделал проще:





public function DoSitemap($per_time,$sdata)
		{
		global $Mainclass;
			if(!$sdata)
				$sdata=array(&#039;offset&#039;=>0);
			$this->Mainclass->LoadOptions(&#039;module_server&#039;,false);
			$result=$this->Mainclass->Db->Query(&#039;SELECT `server_id` FROM `f_servers` LIMIT &#039;.$sdata[&#039;offset&#039;].&#039;,&#039;.$per_time,__file__,__line__);
			$sdata[&#039;offset&#039;]+=$this->Mainclass->Db->Num_rows();
			$this->Url=$this->Mainclass->SUrl;
			while($arr=$this->Mainclass->Db->Fetch_assoc($result))
				Sitemap(&#039;server-&#039;.$arr[&#039;server_id&#039;],&#039;&#039;,&#039;always&#039;,0.5);
			return $sdata;
		}



Alexander, спасибо за подсказку=)
Добрый день. Подскажите, как сделать карту сайта на самом сайте (например, в виде модуля) или создать его в файле sitemap.xml ?
P.S. При создании карты сайта с помощью генератора карты сайта через админку система пишет "Ошибка! Ошибка открытия файла!"
Skyff
dimavsr, Права на запись есть у файла карты сайта?
Цитата (Skyff @ 2024-09-14 18:09)
Права на запись есть у файла карты сайта?

спс, работает. забыл права выставить.
еще вопрос не совсем в тему: урлы на моем сайте на русском. в только что созданной карте сайта, а также в ПС Яндекс они видны в виде крякозябров. Есть ли возможность это исправить?
Skyff
dimavsr, А это не вредит индексации. Исправить если только переименовать в англ, так вроде нельзя. При поиске они выводятся в нормальном виде.
Вот именно, что при поиске они в виде крякозябров и выводятся

http://yandex.ru/yandsearch?text=%22%D0%BD%D0%B5+%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%B0%D1%8F+%D0%B8%D0%B7-%D0%B7%D0%B0+%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0+%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE+%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C+%D0%B2+%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%22&clid=9582&lr=38

хотя в гугле нормально

http://www.google.ru/search?hl=ru&newwindow=1&q=%22%D0%BD%D0%B5+%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%B0%D1%8F+%D0%B8%D0%B7-%D0%B7%D0%B0+%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0+%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE+%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C+%D0%B2+%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%22&aq=f&aqi=&aql=&oq=&gs_rfai=
Skyff
У меня все нормально выдаёт.
а браузер какой? у меня опера
Loader
Цитата (dimavsr @ 2010-09-12, 13:52)
а браузер какой? у меня опера


У меня Опера. Выдаёт вот так:



И так:

Skyff
dimavsr, а ты конкурентов по запросам не учитываешь, за это время по запросом конкурентов появилось, а чей запрос первый тот и выше. Продвигай лучше сайт по запросом а не плачь. Все нормально индексируется, дело в конкурентах и обращений к сайту по запросам.
Ты же мне когда то писал что 2 года СЕО занимаешься , что за вопросы у тебя как у новичка...


dimavsr, Посты свои не красиво удалять...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.