Перейти к публикации

Рекомендованные сообщения

В общем, есть код модуля карты сайта, но данный модуль использует около 60 запросов к БД. Реально ли уменьшить количество запросов ???

Собственно вот код:

<?php

if(!defined('DATALIFEENGINE'))

{

  die("Hacking attempt!");

}

$map = dle_cache("sitemap", $config['skin']);

if(!$map) {

$map = "";

$result = $db->query("SELECT id,name,alt_name FROM ". PREFIX ."_category ORDER BY posi ASC");

while($row = $db->get_row($result)){

$map .= "<ul style='padding:20px;font-size:18px;'><li style='list-style-type: none;'><a href='".$config['http_home_url']."category/${row[alt_name]}/' style='font-size:10pt;font-weight:bold;'>$row[name]</a></li>\n";

$cat = intval($row[id]);

$result2 = $db->query("SELECT id,autor,date,title,alt_name,comm_num,rating,news_read FROM ". PREFIX ."_post WHERE category = '$cat' ORDER BY title ASC");

  while ($row2 = $db->get_row($result2)){

   $map .= "<li style='padding:2px;font-size:11px;vertical-align:middle;'> <a style='font-weight: bold;'  href=".$config['http_home_url'].str_replace("-","/",substr($row2['date'],0,10))."/".$row2['alt_name'].".html>".stripslashes($row2[title])."</a> | $row2[autor] | Прочитано: $row2[news_read] | Комментариев: $row2[comm_num]</li>\n";

  }

$map .= "</ul>\n";

}

create_cache("sitemap", $map);


}


$tpl->load_template('static.tpl');

$tpl->set('{description}', "Карта сайта");

$tpl->set('{static}', $map);

$tpl->compile('content');

$tpl->clear();


?>

Ссылка на сообщение
Поделиться на других сайтах

Вот написал на скорую руку. Сейчас нет времени вылизывать...) Но наверняка есть глюки. Может сам доработаешь)

<style type=text/css>

.first_level{

margin:0px 0px 0px 10px;

font-size: 12px;

color: #808080;

display: block;

}

.second_level{

margin:0px 0px 0px 20px;

font-size: 12px;

color: #808080;

display:block;

}

</style>

<?

	$cat = 0;

   $result=$db->query("SELECT *

		FROM `dle_post`, `dle_category`

		WHERE `dle_post`.category = `dle_category`.id

		ORDER BY `dle_category`.id");

	while($row = $db->get_row($result))

	{

	  if ($row['category']!==$cat)

	  {

		$map .= "<span class='first_level'><a  href='".$config['http_home_url']."category/".$val['alt_name']."/'>$val[name]</a></span>\n";

		$cat = $row['category'];

	  }

	  if ($config['allow_alt_url'] == "yes")

	  $map .= "<span class='second_level'><a href=".$config['http_home_url'].str_replace("-","/",substr($row['date'],0,10))."/".$row['alt_name'].".html>".stripslashes($row[title])."</a> | $row[autor] | Прочитано: $row[news_read] | Коментарів: $row[comm_num]</span>\n";

	  else

	  $map .= "<span class='second_level'><a href=".$config['http_home_url']."index.php?newsid=".$row['id'].">".stripslashes($row[title])."</a> | $row[autor] | Прочитано: $row[news_read] | Коментарів: $row[comm_num]</span>\n";


	}

?>

Ссылка на сообщение
Поделиться на других сайтах

Есть, только там около 60 запросов к БД, вот поэтому я и хочу что бы кто нить его оптимизировал.

Вот сам модуль: http://mirclipov.com/site_map.rar

Ссылка на сообщение
Поделиться на других сайтах

Вот, сделал на основе кода от vovik_sumy ну и оригинала от Numb ))

Скачать

Только я бы из неё убрал автора, количество просмотров и комментариев - поисковикам и посетителям на это плевать (IMHO)

Изменено пользователем domovoi
Ссылка на сообщение
Поделиться на других сайтах

domovoi,

Все работает, но.... id новости в категории одинаковый, без ЧПУ. С ЧПУ норм. Как сделать чтоб работало без ЧПУ?

Переделать запрос. Т.е. SELECT и вызывать поля по одному....

И как вариант

Написать

FROM `dle_category`,`dle_post`

Вместо

FROM `dle_post`, `dle_category`

Поле id есть в одной и в другой БД. :)

Ссылка на сообщение
Поделиться на других сайтах

Установил, работает! Спасибо!

Но вопрос возник...

По какому принципу он выбрасывает всю карту???

Вот как она у меня выглядит:

http://www.soft-commander.net/sitemap

Но мне так не нравится...

Хотелось бы... чтобы в карте было

категория-подкатегория- и все новости в ней!!! по порядку....

а не от балды...как щас!!!

Ссылка на сообщение
Поделиться на других сайтах

Вот как она у меня выглядит:

http://www.soft-commander.net/sitemap

Но мне так не нравится...

Прошелся по твоей карте:

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

карта должна отображать только рабочие страницы

как например на джумале

карта циркового сайта

Ссылка на сообщение
Поделиться на других сайтах

yacenter,

Скрипт работает правильно. Просто неправильная логика. В имя страницы вставляется имя раздела. Нужно переписать немного запрос.

Изменено пользователем vovik_sumy
Ссылка на сообщение
Поделиться на других сайтах

Вот переделанный вариант. Теперь используется только один запрос.

<?PHP

/*

=====================================================

 Copyright (c) 2007 dle.net.ua Владимир Лысак

=====================================================

 Файл: sitemap.php

-----------------------------------------------------

 Назначение: построение карты сайта.

=====================================================

*/

<style type=text/css>

.first_level{

margin:0px 0px 0px 10px;

font-size: 12px;

color: #808080;

display: block;

}

.second_level{

margin:0px 0px 0px 20px;

font-size: 12px;

color: #808080;

display:block;

}

</style>

<?php

   $cat = -1;

   $result=$db->query("SELECT `post`.alt_name post_alt_name,`category`.alt_name cat_alt_name,`post`.date,`post`.title,

		`post`.category,`post`.title,`category`.name,`post`.id,`post`.news_read,`post`.comm_num

		FROM `".PREFIX."_post` AS `post`, `".PREFIX."_category` AS `category`

		WHERE `post`.category = `category`.id

		ORDER BY `category`.id");

	while($row = $db->get_row($result))

	{

	  if ($row['category']!=$cat)

	  {

		$map .= "<span class='first_level'><a href='".$config['http_home_url']."category/".$row['cat_alt_name']."'>".$row[name]."</a></span>\n";

		$cat = $row['category'];

	  }

	  if ($config['allow_alt_url'] == "yes")

	  $map .= "<span class='second_level'><a href=".$config['http_home_url'].str_replace("-","/",substr($row['date'],0,10))."/".$row['post_alt_name'].".html>".stripslashes($row[title])."</a> | $row[autor] | Прочитано: $row[news_read] | Коментарів: $row[comm_num]</span>\n";

	  else

	  $map .= "<span class='second_level'><a href=".$config['http_home_url']."index.php?newsid=".$row['id'].">".stripslashes($row[title])."</a> | $row[autor] | Прочитано: $row[news_read] | Коментарів: $row[comm_num]</span>\n";


	}


	$tpl->load_template('static.tpl');

	$tpl->set('{description}', "Карта сайту");


	$tpl->set('{static}', $map);

	$tpl->compile('content');

	$tpl->clear();

?>

Ссылка на сообщение
Поделиться на других сайтах

Ловите вновь переделанный вариант vovik_sumy:

<?php

if(!defined('DATALIFEENGINE'))

{

  die("Hacking attempt!");

}

   $cat = -1;

   $result=$db->query("SELECT `post`.alt_name post_alt_name,`category`.alt_name cat_alt_name,`post`.title,

		`post`.category,`post`.title,`category`.name,`post`.id,`post`.comm_num

		FROM `".PREFIX."_post` AS `post`, `".PREFIX."_category` AS `category`

		WHERE `post`.category = `category`.id

		ORDER BY `category`.id");

	while($row = $db->get_row($result))

	{

	  if ($row['category']!=$cat)

	  {

		$map .= "<span class='first_level'><p><a href='".$config['http_home_url']."category/".$row['cat_alt_name']."'><b>".$row[name]."</b></a></p></span>\n";

		$cat = $row['category'];

	  }

	  if ($config['allow_alt_url'] == "yes")

	  $map .= "<span class='second_level'><a href=".$config['http_home_url'].str_replace("-","/",substr($row['date'],0,10))."/".$row['post_alt_name'].".html>".stripslashes($row[title])."</a></span><br>\n";

	  else

	  $map .= "<span class='second_level'><a href=".$config['http_home_url']."index.php?newsid=".$row['id'].">".stripslashes($row[title])."</a></span><br>\n";

	}

	$tpl->load_template('static.tpl');

	$tpl->set('{description}', "Карта сайта");

	$tpl->set('{static}', $map);

	$tpl->compile('content');

	$tpl->clear();

?>

Ссылка на сообщение
Поделиться на других сайтах

Исправленная версия.. Ошибочка была)))

<?php

/*

=====================================================

Copyright (c) 2007 dle.net.ua Владимир Лысак

=====================================================

Файл: sitemap.php

-----------------------------------------------------

Назначение: построение карты сайта.

=====================================================

*/

?>

<style type=text/css>

.first_level{

margin:0px 0px 0px 10px;

font-size: 12px;

color: #808080;

display: block;

}

.second_level{

margin:0px 0px 0px 20px;

font-size: 12px;

color: #808080;

display:block;

}

</style>

<?php

   $cat = -1;

   $result=$db->query("SELECT `post`.alt_name post_alt_name,`category`.alt_name cat_alt_name,`post`.date,`post`.title,

		`post`.category,`post`.title,`category`.name,`post`.id,`post`.news_read,`post`.comm_num, `post`.autor

		FROM `".PREFIX."_post` AS `post`, `".PREFIX."_category` AS `category`

		WHERE `post`.category = `category`.id

		ORDER BY `category`.id");

	while($row = $db->get_row($result))

	{

	  if ($row['category']!=$cat)

	  {

		$map .= "<span class='first_level'><a href='".$config['http_home_url']."category/".$row['cat_alt_name']."'>".$row[name]."</a></span>\n";

		$cat = $row['category'];

	  }

	  if ($config['allow_alt_url'] == "yes")

	  $map .= "<span class='second_level'><a href=".$config['http_home_url'].str_replace("-","/",substr($row['date'],0,10))."/".$row['post_alt_name'].".html>".stripslashes($row[title])."</a> | $row[autor] | Прочитано: $row[news_read] | Коментариев: $row[comm_num]</span>\n";

	  else

	  $map .= "<span class='second_level'><a href=".$config['http_home_url']."index.php?newsid=".$row['id'].">".stripslashes($row[title])."</a> | $row[autor] | Прочитано: $row[news_read] | Коментариев: $row[comm_num]</span>\n";


	}


	$tpl->load_template('static.tpl');

	$tpl->set('{description}', "Карта сайту");


	$tpl->set('{static}', $map);

	$tpl->compile('content');

	$tpl->clear();

?>

Изменено пользователем vovik_sumy
Ссылка на сообщение
Поделиться на других сайтах

Надобы выборку сделать от новых новостей к старым и не показывать те что на модерации. Как это сделать?

Ссылка на сообщение
Поделиться на других сайтах

DocentX,

	   WHERE `post`.category = `category`.id

		ORDER BY `category`.id");
заменить на
			WHERE `post`.category = `category`.id AND `post`.approve=1

		 ORDER BY `category`.id,`post`.id");

Сортирует по дате и показывает теперь только допущенные к просмотру. :)

Ссылка на сообщение
Поделиться на других сайтах

Numb,

<?php

/*

=====================================================

Copyright (c) 2007 dle.net.ua Владимир Лысак

=====================================================

Файл: sitemap.php

-----------------------------------------------------

Назначение: построение карты сайта.

=====================================================

*/

?>

<style type=text/css>

.first_level{

margin:0px 0px 0px 10px;

font-size: 12px;

color: #808080;

display: block;

}

.second_level{

margin:0px 0px 0px 20px;

font-size: 12px;

color: #808080;

display:block;

}

</style>

<?php

$sitemap = dle_cache ("sitemap", $config['skin']);

if(!$sitemap)

{

   $cat = -1;

   $result=$db->query("SELECT `post`.alt_name post_alt_name,`category`.alt_name cat_alt_name,`post`.date,`post`.title,

		`post`.category,`post`.title,`category`.name,`post`.id,`post`.news_read,`post`.comm_num, `post`.autor

		FROM `".PREFIX."_post` AS `post`, `".PREFIX."_category` AS `category`

		WHERE `post`.category = `category`.id

		ORDER BY `category`.id");

	while($row = $db->get_row($result))

	{

	  if ($row['category']!=$cat)

	  {

		$map .= "<span class='first_level'><a href='".$config['http_home_url']."category/".$row['cat_alt_name']."'>".$row[name]."</a></span>\n";

		$cat = $row['category'];

	  }

	  if ($config['allow_alt_url'] == "yes")

	  $map .= "<span class='second_level'><a href=".$config['http_home_url'].str_replace("-","/",substr($row['date'],0,10))."/".$row['post_alt_name'].".html>".stripslashes($row[title])."</a> | $row[autor] | Прочитано: $row[news_read] | Коментариев: $row[comm_num]</span>\n";

	  else

	  $map .= "<span class='second_level'><a href=".$config['http_home_url']."index.php?newsid=".$row['id'].">".stripslashes($row[title])."</a> | $row[autor] | Прочитано: $row[news_read] | Коментариев: $row[comm_num]</span>\n";


	}

  create_cache("sitemap", $map);

}


	$tpl->load_template('static.tpl');

	$tpl->set('{description}', "Карта сайту");


	$tpl->set('{static}', $map);

	$tpl->compile('content');

	$tpl->clear();

?>

Ссылка на сообщение
Поделиться на других сайтах

Создай файл sitemap.php в него введи весь код из #21 сообщения.

А потом по инструкции:

Заходим в .htaccess.

--------------------

Добавляем где угодно, но лучше в конец


Код:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# Карта сайта

RewriteRule ^sitemap(/?)+$ /?do=sitemap

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



Заходим в engine.php. 

---------------------

Добавляем, например после


Код

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

case "addnews" :

	include ENGINE_DIR.'/modules/addnews.php';

	break;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


следующий код


Код

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

case "sitemap" :

	include ENGINE_DIR.'/modules/sitemap.php';

	break;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Закачаиваем файл sitemap.php в папку, engine/modules


Всё. Карта сайта доступна по адресу: http://ВАШ.САЙТ/sitemap


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

P.S. Всё работает. Можете посмотреть здесь: http://mirclipov.com/sitemap

Только что меня посетила очень хорошая мысль! Смысл в том, что бы раздель карту сайта на страницы. Что бы например на каждой странице было бы по 500 новостей. Кто сможет такое воплотить ? Буду очень признателен!

Изменено пользователем Numb
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...