Регистрация
Вход через соцсети
Восстановление пароля

Скрипт Google Sitemap для NetCat

Новый топик
27.08.2006, 18:31
Ответить | Цитировать
drjeans
Сморовоз Сергей
drjeans

Зарегистрирован:
2005-03-04
Сообщений: 76

Доброго дня.

Сабж собственно всЈ объясняет. Ни чего из предложенного в нете не удовлетворило и решил сам написать приблуду для генерации Google Sitemap. Это алгоритм, ИМХО, можно использовать и в других CMS, построеных на MySQL.

Зарос перекрЈстно опрашивает две таблицы: `Sub_Class` и `Subdivision`, на предмет активных разделов, затем проверяет кол-во объектов в раздела (Шаблоне, MessageX_n), дату последнего изменения и путь.

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

Цитата:
$sql_where = "Class_ID != '21' AND Class_ID != '7' AND Class_ID != '3' AND ";


У меня это гостевая книга, обратная связь и пр. Далее идЈт сам запрос:

Цитата:
".listQuery("SELECT a.Hidden_URL, a.Subdivision_ID, b.Subdivision_ID, b.EnglishName, b.Class_ID, b.Sub_Class_ID, DATE_FORMAT(a.LastUpdated,'%Y-%m-%d') AS Date FROM Subdivision as a, Sub_Class AS b WHERE ".$sql_where." b.Subdivision_ID = a.Subdivision_ID AND a.Checked = '1' AND b.Checked = '1' AND b.Catalogue_ID = '1' ","<url><loc>http://www.astromobile.ru$data[Hidden_URL]</loc><lastmod>$data[Date]</lastmod><changefreq>weekly</changefreq><priority>0.9</priority></url>".listQuery("SELECT Message_ID, Keyword, DATE_FORMAT(LastUpdated,'%Y-%m-%d') AS Date FROM Message".$data[Class_ID]." WHERE Subdivision_ID = '".$data[Subdivision_ID]."' AND Sub_Class_ID = '".$data[Sub_Class_ID]."' AND ".$data[Class_ID]." != '1' AND Parent_Message_ID ='0' AND Checked = '1' ","<url><loc>http://www.astromobile.ru".$data[Hidden_URL]."\".opt_case(\$data[Keyword],\$data[Keyword],\"".$data[EnglishName]."_\$data[Message_ID]\").\".html</loc><lastmod>\$data[Date]</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>")."")."

Пусть Вас это нагромаждение не пугает, всЈ хотел минимизировать и оптимизировать нагрузку на базу. Получилось, что получилось. Просьба потестировать и высказать свЈ мнение. У себя проверял на NetCat Standard и Plus. Под рукой Small Business не оказалось.

Аудит сайтов на CMS NetCat, оптимизация и поисковое продвижение.
29.08.2006, 10:11
Ответить | Цитировать
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

Код:
$sql_where = "Class_ID != '21' AND Class_ID != '7' AND Class_ID != '3' AND ";

Ну для начала даже этот пример уже можно оптимизировать и минимизировать:
Код:
$sql_where = "Class_ID not in ('21','7','3')";


А потом, имхо, ничего универсального в Вашем примере нет.. универсальным тут явлется лишь Google SiteMap, а предложенный Вами вариант - заточен жестко под Ваш проект, для его использования в других проектах и на других CMS его придется переписывать... думаю проще самому придумать 5-10 строк, чем разбираться в Вашем коде и перестраивать его под себя.

Temet nosce...
29.08.2006, 12:38
Ответить | Цитировать
drjeans
Сморовоз Сергей
drjeans

Зарегистрирован:
2005-03-04
Сообщений: 76

Доброго дня.

Вы правы, только потом заметил, что указал статичный УРЛ.

нужно заменить два куска кода:

<loc>http://www.astromobile.ru

на

<loc>http://$SERVER_NAME

тогда всЈ пойдЈт и на Вашем проекте.

ЕщЈ заметил, что нет в выдаче строк, где раздел имеет "внешние ссылки" ведущие не во вне, а на другие разделы либо файлы...

Если тема не интересна, то сорри, ветку закрываю...

Аудит сайтов на CMS NetCat, оптимизация и поисковое продвижение.
17.09.2007, 23:09
Ответить | Цитировать
Гость

Зарегистрирован:
1970-01-01
Сообщений: 665

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

Что-то из твоей затеи вышло хорошее? У того, что есть в топике, уже видится один большой недостаток - перечисляются только разделы, точнее их корневые урлы. А как же ссылки на все объекты этих разделов? =)

Для того, что ты тут написал, куда проще было использовать обычный ".s_browse_sub(0,$browse_map)."
а не писать страшную функцию-запрос с кучей слэшей.
18.09.2007, 00:00
Ответить | Цитировать
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

оооо, какие люди =)

как сделаешь - выкладывай, заценим! :Р

Temet nosce...
18.09.2007, 08:39
Ответить | Цитировать
resident
Веб-группа «Дабл Ю»

Зарегистрирован:
2005-01-10
Сообщений: 336

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

<?php
include_once("/usr/home/www/public_html/netcat/vars.inc.php");
include_once($ROOT_FOLDER."connect_io.php");
//changefreq[ClassID]=always hourly daily weekly monthly yearly never
$changefreq[2]="never";
$changefreq[5]="weekly";
$changefreq[33]="never";
$changefreq[45]="never";

echo "<?xml version="1.0" encoding="UTF-8"?>n<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">n";
// разделы
$row=$db->get_results("SELECT c.Domain, Hidden_URL, IF(sub.LastUpdated<cc.LastUpdated,IF(cc.LastUpdated<c.LastUpdated,c.LastUpdated,cc.LastUpdated),IF(sub.LastUpdated<c.LastUpdated,c.LastUpdated,sub.LastUpdated)) as LastUpdated, cc.Class_ID, cl.RecordsPerPage, cl.SortBy, cl.LastUpdated, sub.Subdivision_ID, cc.Sub_Class_ID FROM Subdivision as sub, Catalogue as c LEFT JOIN Sub_Class as cc ON cc.Subdivision_ID=sub.Subdivision_ID LEFT JOIN Class as cl ON cl.Class_ID=cc.Class_ID WHERE c.Catalogue_ID=sub.Catalogue_ID AND sub.Read_Access_ID<2 AND cl.System_Table_ID=0",ARRAY_N);
$num=$db->num_rows;
for($i=0;$i<$num;$i++)
{
$LastUpdated=$row[$i][2]>$row[$i][6]?$row[$i][2]:$row[$i][6];
if($row[$i][3])
{
$rows=$db->query("SELECT LastUpdated FROM Message".$row[$i][3]." WHERE Checked=1 AND Subdivision_ID=".$row[$i][7]." AND Sub_Class_ID=".$row[$i][8]." ORDER BY ".($row[$i][5]&&!strpos($row[$i][5],".")?$row[$i][5]:"Priority DESC")." LIMIT ".$row[$i][4]."",ARRAY_N);
for($j=0;$j<$rows;$j++) if($LastUpdated<$db->last_result[$j][0]) $LastUpdated=$db->last_result[$j][0];
}
$map[$row[$i][0].$row[$i][1]]=$LastUpdated;
}


// шаблоны
//$num=$db->query("SELECT cc.Subdivision_ID, cc.EnglishName, cc.LastUpdated, cc.Sub_Class_ID, cc.Class_ID FROM Subdivision as sub, Catalogue as c, Sub_Class as cc WHERE c.Catalogue_ID=sub.Catalogue_ID AND cc.Subdivision_ID=sub.Subdivision_ID");

$row=$db->get_results("SELECT Class_ID, SortBy, RecordsPerPage LastUpdated FROM Class WHERE Class_ID>1 AND System_Table_ID=0 AND RecordTemplateFull<>''",ARRAY_N);
$num=$db->num_rows;
for($i=0;$i<$num;$i++)
{
$rows=$db->query("SELECT c.Domain, sub.Hidden_URL, cc.EnglishName, m.Message_ID, m.LastUpdated FROM Catalogue as c, Subdivision as sub, Sub_Class as cc, Message".$row[$i][0]." as m WHERE c.Catalogue_ID=sub.Catalogue_ID AND cc.Subdivision_ID=sub.Subdivision_ID AND m.Subdivision_ID=sub.Subdivision_ID AND m.Sub_Class_ID=cc.Sub_Class_ID AND m.Checked=1 AND m.Parent_Message_ID=0 AND sub.Read_Access_ID<2 AND cc.Read_Access_ID<2 ORDER BY sub.Hidden_URL, cc.EnglishName, Message_ID ASC",ARRAY_N);
for($j=0;$j<$rows;$j++)
{
$LastUpdated=$map[$db->last_result[$j][0].$db->last_result[$j][1]];
if($LastUpdated<$db->last_result[$j][4]) $LastUpdated=$db->last_result[$j][4];
$map[$db->last_result[$j][0].$db->last_result[$j][1].$db->last_result[$j][2]."_".$db->last_result[$j][3].".html"]=$LastUpdated;
if($changefreq[$row[$i][0]]) $freq[$db->last_result[$j][0].$db->last_result[$j][1].$db->last_result[$j][2]."_".$db->last_result[$j][3].".html"]="tt<changefreq>".$changefreq[$row[$i][0]]."</changefreq>n";
}
}
foreach($map as $k=>$v)
{
echo "t<url>n";
echo "tt<loc>http://$k</loc>ntt<lastmod>".str_replace(" ","T",$v)."+03:00</lastmod>n";
echo $freq[$k];
echo "t</url>n";
}
echo "</urlset>n";

?>
25.02.2008, 15:55
Ответить | Цитировать
resident
Веб-группа «Дабл Ю»

Зарегистрирован:
2005-01-10
Сообщений: 336

Модуль: Карта сайта Google Sitemap
198 196 2008-02-25 15:55:47 6902
Описание проекта