Forum. MyNuke.ru
Forum. MyNuke.ruСообщения за сегодняПерсональные сообщения

Навигация  
Вернуться   Forum. MyNuke.ru > PHP-NUKE > Настройка и Изменение > Модули
Ник
Пароль
Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Flint2000 вне форума      Старый Уменьшение Количества Запросов В Модуле Pages #1  
Flint2000
Новенький
Регистрация: 01.02.2007
Сообщения: 27


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Flint2000 Найти все сообщения от Flint2000 Добавить Flint2000 в список друзей  
21.03.2008, 18:08

Вот такая трабла: у меня модуль Pages с хаком от xRay т.е. неограниченная вложеность категорий.
У меня в одной категории 59 под категорий и соответственно в каждой под категории более 3 под-под категорий - небу увлекаться подсчетом. Вообщем в таблице nuke_rupages_categories 120 записей. и при выводе данных по функции list_pages_categories количество запросов к базе 116, соответственно при добавлении под категорий количество запросов будет увеличиваться. Помогите пожалуйста с оптимизацией єтой функции.
PHP код:
 function list_pages_categories($cid$nach) { 
global 
$prefix$db$sitename$admin$multilingual$module_name$description$parentid$module_title$admin_file$number$show__all_docs$subkatnumber$show_signature$show_date$show_counter$page_img$cat_img$subcat_img$subcat_sub_img$page_title;
include(
"header.php");
if (! 
$nach):
$nach=0;
endif;
 
title("$page_title");
OpenTable();
$sql "SELECT title, description, parentid FROM ".$prefix."_rupages_categories WHERE cid='$cid'";
$result $db->sql_query($sql);
$row $db->sql_fetchrow($result);
$rtitle=getparentlink($parentid$page_title);
echo 
"<center><b>$row[rtitle]</b><br>$row[description]<hr size=\"1\"></center>";
//xRay
$result21 $db->sql_query("select cid, title, description from ".$prefix."_rupages_categories where parentid=$cid order by title");
$numrows0 $db->sql_numrows($result21);
while(list(
$cid1$stitle1$description1) = $db->sql_fetchrow($result21)) {
 
echo 
"<font class=\"option\">$cat_img <a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$cid1\">$stitle1</a>";
if (
$subkatnumber == 1) {
$result31 $db->sql_query("select pid from ".$prefix."_rupages where cid=$cid1");
$numrows1 $db->sql_numrows($result31);
echo 
"($numrows1)";
}
echo 
"</font><br>$description1<br>";
 
 
$result22 $db->sql_query("select cid, title, description from ".$prefix."_rupages_categories where parentid=$cid1 order by title");
$numrows01 $db->sql_numrows($result22);
while(list(
$cid2$stitle2$description2) = $db->sql_fetchrow($result22)) {
 
$result8 $db->sql_query("select cid, title from ".$prefix."_rupages_categories where parentid=$cid2");
$numsubcat $db->sql_numrows($result8);
if (
$numsubcat==0)
{
echo 
"<font class=\"content\"> $subcat_img <a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$cid2\">$stitle2</a><br>";
}
else
{
echo 
"<font class=\"content\"> $subcat_sub_img <a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$cid2\">$stitle2</a><br>";
}
 
if (
$subkatnumber == 1) {
$result31 $db->sql_query("select pid from ".$prefix."_rupages where cid=$cid2");
$numrows2 $db->sql_numrows($result31);
echo 
"($numrows2)<br>";
}
}
 
}
if (
$numrows0!=0) echo "<br><hr size=\"1\">";
//xRay
 
$sql1 "SELECT pid, title, subtitle, clanguage, page_header FROM ".$prefix."_rupages WHERE active='1' AND cid='$cid' ORDER BY title";
$result1=$db->sql_query($sql1);
$kolvo=mysql_affected_rows();
$kon=$nach+$number;
$sql "SELECT pid, title, subtitle, clanguage, page_header, signature, counter, date FROM ".$prefix."_rupages WHERE active='1' AND cid='$cid' ORDER BY title LIMIT $nach , $kon";
 
$result $db->sql_query($sql);
 
 
 
while (
$row $db->sql_fetchrow($result)) {
$pid $row[pid];
$title $row[title];
$subtitle $row[subtitle];
$clanguage $row[clanguage];
$header $row[page_header];
if (
$multilingual == 1) {
$the_lang "<img src=\"images/language/flag-$clanguage.png\" hspace=\"3\" border=\"0\" height=\"10\" width=\"20\">";
} else {
$the_lang "";
}
if (
$subtitle != "") {
$subtitle "<br>$subtitle";
} else {
$subtitle "";
}
if (
is_admin($admin)) {
echo 
"$page_img $the_lang <a href=\"modules.php?name=$module_name&pa=showpage&pid=$pid\"><b>$title</b></a>$subtitle<br>$header<br>";
 
if (
$show_signature==1) echo "<font class='pagesdescr'>"._PAUTHOR.": ".$row[signature]."</font><br>";
if (
$show_counter==1) echo "<font class='pagesdescr'>"._PCOUNTER.": <b>".$row[counter]."</b> </font>";
$dtp=explode(" ",$row[date]);
$datepbl $dtp[0];
if (
$show_date==1) echo "<font class='pagesdescr'>"._PDATE.": ".$datepbl."</font>";
 
echo 
"<br>[ <a href=\"".$admin_file.".php?op=pages_edit&pid=$pid\">"._EDIT."</a> | <a href=\"".$admin_file.".php?op=pages_change_status&pid=$pid&active=1\">"._DEACTIVATE."</a> | <a href=\"".$admin_file.".php?op=pages_delete&pid=$pid\">"._DELETE."</a> ]";
echo 
"<br><br>";
} else {
echo 
"$page_img $the_lang <a href=\"modules.php?name=$module_name&pa=showpage&pid=$pid\"><b>$title</b></a> $subtitle<br>$header<br>";
 
if (
$show_signature==1) echo "<font class='pagesdescr'>"._PAUTHOR.": ".$row[signature]."</font><br>";
if (
$show_counter==1) echo "<font class='pagesdescr'>"._PCOUNTER.": <b>".$row[counter]."</b> </font>";
$dtp=explode(" ",$row[date]);
$datepbl $dtp[0];
if (
$show_date==1) echo "<font class='pagesdescr'>"._PDATE.": ".$datepbl."</font>";
echo 
"<br><br>";
}
}
 
$n=$kolvo/$number;
if (
$kolvo/$number){
$n++;
}
 
if (
$n>=2)
{
$count=0;
echo 
"<center><b>"._PAGEN."</b><br><br>|";
for (
$i=1;$i<=$n;$i++){
 
echo 
" ";
echo 
"<a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$cid&nach=$count\">$i</a>";
echo 
" |";
$count=$count+$number;
}
}
if (
$show__all_docs==1) echo "</center><br>"._ALLDOCS." <b>$kolvo</b>";
 
 
if (
is_admin($admin)) {
$sql "SELECT pid, title, subtitle, clanguage FROM ".$prefix."_rupages WHERE active='0' AND cid='$cid' ORDER BY date";
$result $db->sql_query($sql);
echo 
"<br><br><b>"._YOURADMINLIST."</b><br><br>";
echo 
"<blockquote>";
while (
$row $db->sql_fetchrow($result)) {
$pid $row[pid];
$title $row[title];
$subtitle $row[subtitle];
$clanguage $row[clanguage];
if (
$multilingual == 1) {
$the_lang "<img src=\"images/language/flag-$clanguage.png\" hspace=\"3\" border=\"0\" height=\"10\" width=\"20\">";
} else {
$the_lang "";
}
if (
$subtitle != "") {
$subtitle "<br>$subtitle";
} else {
$subtitle " ";
}
echo 
"<strong><big>·</big></strong> $the_lang <a href=\"modules.php?name=$module_name&pa=showpage&pid=$pid\"><b>$title</b></a>$subtitle<br>[ <a href=\"".$admin_file.".php?op=pages_edit&pid=$pid\">"._EDIT."</a> | <a href=\"".$admin_file.".php?op=pages_change_status&pid=$pid&active=0\">"._ACTIVATE."</a> | <a href=\"".$admin_file.".php?op=pages_delete&pid=$pid\">"._DELETE."</a> ]<br><br>";
}
 
}
echo 
"<center>[ <a href=\"java script:history.go(-1)\">"._PBACK."</a> | <a href=\"modules.php?name=$module_name\">"._PHOME."</a> ]</center>";
CloseTable();
include(
"footer.php");

Знаю что вся загвоздка в операторе while, но как изменить не знаю, опыта мало
Может можно както объеденить запросы?

Последний раз редактировалось Soniks, 26.03.2008 в 10:29.

Soniks вне форума      Старый #2  
Soniks
Администратор
Регистрация: 16.01.2005
Сообщения: 4,814


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Soniks Посетить домашнюю страницу Soniks Найти все сообщения от Soniks Добавить Soniks в список друзей  
26.03.2008, 11:07

Работоспособность не проверял, но должно все работать:
PHP код:
 function list_pages_categories($cid$nach) { 
global 
$prefix$db$sitename$admin$multilingual$module_name$description$parentid$module_title$admin_file$number$show__all_docs$subkatnumber$show_signature$show_date$show_counter$page_img$cat_img$subcat_img$subcat_sub_img$page_title;
include(
"header.php");
if (! 
$nach):
$nach=0;
endif;
 
title("$page_title");
OpenTable();
####### Начало оптимизации #######
// $cid - id категории
$cid intval($cid);
// Загоняем весь список категорий в два массива:
$cid_array = array();   // Массив с ключами по "cid"
$parent_array = array();  // Массив с ключами по "parentid" и значениями "cid"
$sql "SELECT cat.cid, cat.title, cat.description, cat.parentid, COUNT(page.pid) AS count_pages FROM ".$prefix."_rupages_categories AS cat LEFT JOIN ".$prefix."_rupages AS page ON(page.cid=cat.cid AND page.active='1') WHERE cat.active='1' GROUP BY cat.cid ORDER BY cat.title ASC";
$all_result $db->sql_query($sql);
while(
$all_row $db->sql_fetchrow($all_result)){
 
$cid_array[$all_row['cid']] = $all_row;
 
$parent_array[$all_row['parentid']][] = $all_row['cid'];
}
//$rtitle=getparentlink($parentid, $page_title);
echo "<center><b>".$cid_array[$cid]['title']."</b><br>".$cid_array[$cid]['description']."<hr size=\"1\"></center>";
// Выводим из маллива подкатегории нашей категори, если такие есть
if($parent_array[$cid] and is_array($parent_array[$cid])){
 foreach(
$parent_array[$cid] as $sub_sid){
  echo 
"<font class=\"option\">$cat_img <a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$sub_sid\">".$cid_array[$sub_sid]['title']."</a>";
  if (
$cid_array[$sub_sid]['count_pages'] >0) {
   echo 
"(".$cid_array[$sub_sid]['count_pages'].")";
  }
  echo 
"</font><br>".$cid_array[$sub_sid]['description']."<br>";
  
// Если есть подкатегории то выводим их
  
if($parent_array[$sub_sid] and is_array($parent_array[$sub_sid])){
   foreach (
$parent_array[$sub_sid] as $sub2_cid){
    
// Проверяем есть ли у еэтой подкатегории подкатегория
    
if (!empty($parent_array[$sub2_cid]))
    {
     echo 
"<font class=\"content\"> $subcat_img <a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$sub2_cid\">".$cid_array[$sub2_cid]['title']."</a><br>";
    }
    else
    {
     echo 
"<font class=\"content\"> $subcat_sub_img <a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$sub2_cid\">".$cid_array[$sub2_cid]['title']."</a><br>";
    }
    if (
$cid_array[$sub2_cid]['count_pages'] >0) {
     echo 
"(".$cid_array[$sub2_cid]['count_pages'].")<br>";
    }
   }
  } 
 }
 echo 
"<br><hr size=\"1\">";
}
####### Конец оптимизации #######
 
$sql1 "SELECT pid, title, subtitle, clanguage, page_header FROM ".$prefix."_rupages WHERE active='1' AND cid='$cid' ORDER BY title";
$result1=$db->sql_query($sql1);
$kolvo=mysql_affected_rows();
$kon=$nach+$number;
$sql "SELECT pid, title, subtitle, clanguage, page_header, signature, counter, date FROM ".$prefix."_rupages WHERE active='1' AND cid='$cid' ORDER BY title LIMIT $nach , $kon";
 
$result $db->sql_query($sql);
 
 
 
while (
$row $db->sql_fetchrow($result)) {
$pid $row[pid];
$title $row[title];
$subtitle $row[subtitle];
$clanguage $row[clanguage];
$header $row[page_header];
if (
$multilingual == 1) {
$the_lang "<img src=\"images/language/flag-$clanguage.png\" hspace=\"3\" border=\"0\" height=\"10\" width=\"20\">";
} else {
$the_lang "";
}
if (
$subtitle != "") {
$subtitle "<br>$subtitle";
} else {
$subtitle "";
}
if (
is_admin($admin)) {
echo 
"$page_img $the_lang <a href=\"modules.php?name=$module_name&pa=showpage&pid=$pid\"><b>$title</b></a>$subtitle<br>$header<br>";
 
if (
$show_signature==1) echo "<font class='pagesdescr'>"._PAUTHOR.": ".$row[signature]."</font><br>";
if (
$show_counter==1) echo "<font class='pagesdescr'>"._PCOUNTER.": <b>".$row[counter]."</b> </font>";
$dtp=explode(" ",$row[date]);
$datepbl $dtp[0];
if (
$show_date==1) echo "<font class='pagesdescr'>"._PDATE.": ".$datepbl."</font>";
 
echo 
"<br>[ <a href=\"".$admin_file.".php?op=pages_edit&pid=$pid\">"._EDIT."</a> | <a href=\"".$admin_file.".php?op=pages_change_status&pid=$pid&active=1\">"._DEACTIVATE."</a> | <a href=\"".$admin_file.".php?op=pages_delete&pid=$pid\">"._DELETE."</a> ]";
echo 
"<br><br>";
} else {
echo 
"$page_img $the_lang <a href=\"modules.php?name=$module_name&pa=showpage&pid=$pid\"><b>$title</b></a> $subtitle<br>$header<br>";
 
if (
$show_signature==1) echo "<font class='pagesdescr'>"._PAUTHOR.": ".$row[signature]."</font><br>";
if (
$show_counter==1) echo "<font class='pagesdescr'>"._PCOUNTER.": <b>".$row[counter]."</b> </font>";
$dtp=explode(" ",$row[date]);
$datepbl $dtp[0];
if (
$show_date==1) echo "<font class='pagesdescr'>"._PDATE.": ".$datepbl."</font>";
echo 
"<br><br>";
}
}
 
$n=$kolvo/$number;
if (
$kolvo/$number){
$n++;
}
 
if (
$n>=2)
{
$count=0;
echo 
"<center><b>"._PAGEN."</b><br><br>|";
for (
$i=1;$i<=$n;$i++){
 
echo 
" ";
echo 
"<a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$cid&nach=$count\">$i</a>";
echo 
" |";
$count=$count+$number;
}
}
if (
$show__all_docs==1) echo "</center><br>"._ALLDOCS." <b>$kolvo</b>";
 
 
if (
is_admin($admin)) {
$sql "SELECT pid, title, subtitle, clanguage FROM ".$prefix."_rupages WHERE active='0' AND cid='$cid' ORDER BY date";
$result $db->sql_query($sql);
echo 
"<br><br><b>"._YOURADMINLIST."</b><br><br>";
echo 
"<blockquote>";
while (
$row $db->sql_fetchrow($result)) {
$pid $row[pid];
$title $row[title];
$subtitle $row[subtitle];
$clanguage $row[clanguage];
if (
$multilingual == 1) {
$the_lang "<img src=\"images/language/flag-$clanguage.png\" hspace=\"3\" border=\"0\" height=\"10\" width=\"20\">";
} else {
$the_lang "";
}
if (
$subtitle != "") {
$subtitle "<br>$subtitle";
} else {
$subtitle " ";
}
echo 
"<strong><big>·</big></strong> $the_lang <a href=\"modules.php?name=$module_name&pa=showpage&pid=$pid\"><b>$title</b></a>$subtitle<br>[ <a href=\"".$admin_file.".php?op=pages_edit&pid=$pid\">"._EDIT."</a> | <a href=\"".$admin_file.".php?op=pages_change_status&pid=$pid&active=0\">"._ACTIVATE."</a> | <a href=\"".$admin_file.".php?op=pages_delete&pid=$pid\">"._DELETE."</a> ]<br><br>";
}
 
}
echo 
"<center>[ <a href=\"java script:history.go(-1)\">"._PBACK."</a> | <a href=\"modules.php?name=$module_name\">"._PHOME."</a> ]</center>";
CloseTable();
include(
"footer.php");

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


Flint2000 вне форума      Старый #3  
Flint2000
Новенький
Регистрация: 01.02.2007
Сообщения: 27


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Flint2000 Найти все сообщения от Flint2000 Добавить Flint2000 в список друзей  
24.04.2008, 18:48

Soniks Спасибо большое!

Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Категории в модуле Pages Brigadir Установка Модулей 45 15.01.2006 00:08
Картинка в модуле Pages? avg Установка Модулей 8 24.09.2005 00:11
Как включить редактор в модуле Pages? android Настройка и Изменение 4 01.06.2005 14:35


Часовой пояс GMT +4, время: 04:37.


На Верх
Рейтинг@Mail.ru