Показать сообщение отдельно
Soniks вне форума      Старый News (часть2) #11  
Soniks
Администратор
Регистрация: 16.01.2005
Сообщения: 4,814


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

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

Оптимизируем модуль Новостей
Открываем modules/News/article.php

Находим:
PHP код:
 require_once("mainfile.php"); 

Выше добавляем:
PHP код:
 $show_related 1// 1 - Показывать блок "Связанные ссылки" | 0 - не показывать
$show_ratings 1// 1 - Показывать блок "Рейтинг статьи " | 0 - не показывать
$show_option 1// 1 - Показывать блок "Опции " | 0 - не показывать (Админ все равно будет видить этот блок) 

То, что мы сейчас добавили, является настраиваемой частью скрипта, вы можете выключить не нужные вам блоки.
Находим:
PHP код:
 $sid $_GET['sid']; 

Заменяем на:
PHP код:
 $sid intval($_GET['sid']); 

Находим:
PHP код:
 $result $db->sql_query("select catid, aid, time, title, hometext, bodytext, topic, informant, notes, acomm, haspoll, pollID, score, ratings FROM ".$prefix."_stories where sid='$sid'"); 

Заменяем на:
PHP код:
 $result $db->sql_query("SELECT s.*, t.*, c.title as title1 FROM ".$prefix."_stories AS s LEFT JOIN ".$prefix."_topics AS t ON(t.topicid=s.topic) LEFT JOIN ".$prefix."_stories_cat AS c ON( c.catid=s.catid and s.catid>0) WHERE s.sid='$sid'"); 

Находим:
PHP код:
 getTopics($sid); 

Заменяем на:
PHP код:
 $topicid intval($row['topicid']); 
$topicname filter($row['topicname'], nohtml); 
$topicimage filter($row['topicimage'], nohtml); 
$topictext filter($row['topictext'], nohtml); 

Находим:
PHP код:
 if ($catid != 0) {
$row2 $db->sql_fetchrow($db->sql_query("select title from ".$prefix."_stories_cat where catid='$catid'"));
$title1 filter($row2['title'], nohtml); 

Заменяем на:
PHP код:
 if($title1 filter($row['title1'], nohtml)){ 

Это мы оптимизировали вывод самих новостей, а теперь займемся выводом блоков, которые выводятся с права от новости.
Находим:
PHP код:
 $row3 $db->sql_fetchrow($db->sql_query("SELECT pollTitle, voters FROM ".$prefix."_poll_desc WHERE pollID='$pollID'")); 

Заменяем на:
PHP код:
 $row3 $db->sql_fetchrow($db->sql_query("SELECT d.pollTitle, d.voters, COUNT(c.tid) AS ctid FROM ".$prefix."_poll_desc AS d LEFT JOIN ".$prefix."_pollcomments AS c ON(c.pollID='$pollID') WHERE d.pollID='$pollID' GROUP BY d.pollTitle")); 

Находим:
PHP код:
 for($i 1$i <= 12$i++) {
$result4 $db->sql_query("SELECT pollID, optionText, optionCount, voteID FROM ".$prefix."_poll_data WHERE (pollID='$pollID') AND (voteID='$i')");
$row4 $db->sql_fetchrow($result4);
$numrows $db->sql_numrows($result4);
if(
$numrows != 0) {
$optionText $row4['optionText'];
if(
$optionText != "") {
    
$boxContent .= "<tr><td valign=\"top\"><input type=\"radio\" name=\"voteID\" value=\"".$i."\"></td><td width=\"100%\"><font class=\"content\">$optionText</font></td></tr>\n";
}
}


Заменяем на:
PHP код:
 $result4 $db->sql_query("SELECT pollID, optionText, optionCount, voteID FROM ".$prefix."_poll_data WHERE pollID='$pollID' ORDER BY voteID ");
$numrows $db->sql_numrows($result4);
if(
$numrows != 0) {
while(
$row4 $db->sql_fetchrow($result4)){
$optionText $row4['optionText'];
if(
$optionText != "") {
    
$boxContent .= "<tr><td valign=\"top\"><input type=\"radio\" name=\"voteID\" value=\"".$row4['voteID']."\"></td><td width=\"100%\"><font class=\"content\">$optionText</font></td></tr>\n";
}
}


Находим и удаляем:
PHP код:
 for($i 0$i 12$i++) {
$row5 $db->sql_fetchrow($db->sql_query("SELECT optionCount FROM ".$prefix."_poll_data WHERE (pollID='$pollID') AND (voteID='$i')"));
$optionCount $row5['optionCount'];
$sum = (int)$sum+$optionCount;


Находим:
PHP код:
 if ($pollcomm) {
$result6 $db->sql_query("select * from ".$prefix."_pollcomments where pollID='$pollID'");
$numcom $db->sql_numrows($result6);
$boxContent .= "<br>"._VOTES.": <b>$sum</b><br>"._PCOMMENTS." <b>$numcom</b>\n\n";
} else {
$boxContent .= "<br>"._VOTES." <b>$sum</b>\n\n";


Заменяем на:
PHP код:
 if ($pollcomm) {
$boxContent .= "<br>"._VOTES.": <b>$voters</b><br>"._PCOMMENTS." <b>".$row3['ctid']."</b>\n\n";
} else {
$boxContent .= "<br>"._VOTES." <b>$voters</b>\n\n";


Находим:
PHP код:
 $row7 $db->sql_fetchrow($db->sql_query("select title, content, active, bposition from ".$prefix."_blocks where blockfile='block-Login.php' $querylang")); 

Выше добавляем (изменено):
PHP код:
 global $block_info;
$show_login false;
if(
$block_info){
 if(
$block_info['r']){
  foreach(
$block_info['r'] as $value){
   if(
$value['blockfile'] =='block-Login.php'){
    
$show_login true;
    break;
   }
  }
 }
}else{ 

Находим:
PHP код:
 if (($active == 1) AND ($position == "r") AND (!is_user($user))) {
loginbox();


Заменяем на:
PHP код:
 if (($active == 1) AND ($position == "r")) $show_login true

if(!
is_user($user) and $show_loginloginbox(); 

Находим:
PHP код:
 $boxtitle ""._RELATED.""

Выше добавляем:
PHP код:
 if($show_related==1){ 

Находим:
PHP код:
 $boxstuff .= "<a href=\"modules.php?name=$module_name&file=article&sid=$topstory\">$ttitle</a></font></center><br>\n";
themesidebox($boxtitle$boxstuff); 

Ниже добавляем:
PHP код:
 

Находим:
PHP код:
 if ($ratings != 0) { 

Выше добавляем:
PHP код:
 if($show_ratings==1){ 

Находим:
PHP код:
 $ratecontent .= "<center><input type=\"submit\" value=\""._CASTMYVOTE."\"></center></form>";
themesidebox($ratetitle$ratecontent); 

Ниже добавляем:
PHP код:
 

Находим:
PHP код:
 $optiontitle ""._OPTIONS.""

Выше добавляем:
PHP код:
 if($show_option==or is_admin($admin)){ 

Находим (изменено):
PHP код:
 echo "</td></tr></table>\n"

Выше добавляем:
PHP код:
 

В результате, при прочтение полной версии новости, модуль делает 2 запроса без блоков и 6 с блоками (2-опрос, 2-ссылки). Это без вывода ассоциаций и комментариев (ими займемся позже).
На сегодня хватит
 
"Если бы вам удалось надавать под зад человеку, виноватому в большинстве ваших неприятностей - вы бы неделю не смогли сидеть".