"Последние комментарии" без дублировани&# "Последние комментарии" без дублировани&#
 

News:

CPG Release 1.6.26
Correct PHP8.2 issues with user and language managers.
Additional fixes for PHP 8.2
Correct PHP8 error with SMF 2.0 bridge.
Correct IPTC supplimental category parsing.
Download and info HERE

Main Menu

"Последние комментарии" без дублировани&#

Started by gfxyer, November 05, 2009, 05:05:09 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

gfxyer

Можно ли устранить дублирования превьюшек с комментариями одного файла и выводить только превью с информацией о последнем комментарии? Т.е. у файла есть несколько комментариев написаных подряд. Можно ли в "Последних комментариях" оставить только  одну превьюшку с последним комментарием, а не несколько подряд?

gfxyer

У кого-нить есть мысли в какую сторону копать?

gfxyer

Даже не так! Копать я знаю куда -> сюда. Но так как по сути это мой первый опыт общения с php, то решить некоторые проблемы с тем кодом не могу, пока.
Во-первых слетает дата коментов.
Во-вторых выводяться все комменты, даже тех альбомов к которым нет прав доступа.

Может кто сможет мне оказать помощь?

Makc666

gfxyer, используйте пожалуйста или Firefox, или Opera на данном форуме. Почему, написано тут -> http://forum.coppermine-gallery.net/index.php/topic,37805.0.html

Quote from: gfxyer on November 05, 2009, 05:05:09 PM
Можно ли устранить дублирования превьюшек с комментариями одного файла и выводить только превью с информацией о последнем комментарии? Т.е. у файла есть несколько комментариев написаных подряд. Можно ли в "Последних комментариях" оставить только  одну превьюшку с последним комментарием, а не несколько подряд?

Функция, которая за это отвечает находится с файле:
./include/functions.inc.php

       case 'lastcom': // Last comments                                                                                                                                                                                                    
               if ($META_ALBUM_SET && $CURRENT_CAT_NAME) {                                                                                                                                                                                  
                       $album_name = $album_name = $lang_meta_album_names['lastcom'].' - '. $CURRENT_CAT_NAME;                                                                                                                              
               } else {                                                                                                                                                                                                                    
                       $album_name = $lang_meta_album_names['lastcom'];                                                                                                                                                                    
               }                                                                                                                                                                                                                            
                                                                                                                                                                                                                                           
               // Replacing the AND in ALBUM_SET with AND (                                                                                                                                                                                
               if($META_ALBUM_SET){                                                                                                                                                                                                        
                       $TMP_SET = "AND (" . substr($META_ALBUM_SET, 3);                                                                                                                                                                    
               }else{                                                                                                                                                                                                                      
                       $TMP_SET = "AND (1";                                                                                                                                                                                                
               }                                                                                                                                                                                                                            
                                                                                                                                                                                                                                           
               $query = "SELECT COUNT(*) from {$CONFIG['TABLE_COMMENTS']}, {$CONFIG['TABLE_PICTURES']}  WHERE approved = 'YES' AND {$CONFIG['TABLE_COMMENTS']}.pid = {$CONFIG['TABLE_PICTURES']}.pid $TMP_SET $keyword)";                  
               $result = cpg_db_query($query);                                                                                                                                                                                              
                                                                                                                                                                                                                                           
               $nbEnr = mysql_fetch_array($result);                                                                                                                                                                                        
               $count = $nbEnr[0];                                                                                                                                                                                                          
               mysql_free_result($result);                                                                                                                                                                                                  
               $select_columns = '*'; //allows building any data into any thumbnail caption                                                                                                                                                
               if($select_columns == '*'){                                                                                                                                                                                                  
                 $select_columns = 'p.*, msg_id, author_id, msg_author, UNIX_TIMESTAMP(msg_date) as msg_date, msg_body, aid';                                                                                                              
               } else {                                                                                                                                                                                                                    
                 $select_columns = str_replace('pid', 'c.pid', $select_columns).', msg_id, author_id, msg_author, UNIX_TIMESTAMP(msg_date) as msg_date, msg_body, aid';                                                                    
               }                                                                                                                                                                                                                            
                                                                                                                                                                                                                                           
               $TMP_SET = str_replace($CONFIG['TABLE_PICTURES'],'p',$TMP_SET);                                                                                                                                                              
               $query = "SELECT $select_columns FROM {$CONFIG['TABLE_COMMENTS']} as c, {$CONFIG['TABLE_PICTURES']} as p WHERE approved = 'YES' AND c.pid = p.pid $TMP_SET $keyword) ORDER by msg_id DESC $limit";                          
               $result = cpg_db_query($query);                                                                                                                                                                                              
                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                           
               $rowset = cpg_db_fetch_rowset($result);                                                                                                                                                                                      
               mysql_free_result($result);                                                                                                                                                                                                  
                                                                                                                                                                                                                                           
               if ($set_caption) build_caption($rowset,array('msg_body','msg_date'));                                                                                                                                                      
                                                                                                                                                                                                                                           
               $rowset = CPGPluginAPI::filter('thumb_caption_lastcom',$rowset);                                                                                                                                                            
                                                                                                                                                                                                                                           
               return $rowset;                                                                                                                                                                                                              
               break;


Запрос вот он:
$query = "SELECT $select_columns FROM {$CONFIG['TABLE_COMMENTS']} as c, {$CONFIG['TABLE_PICTURES']} as p WHERE approved = 'YES' AND c.pid = p.pid $TMP_SET $keyword) ORDER by msg_id DESC $limit";

По идее, добавление сюда:
GROUP BY pid
перед
ORDER by
будет выводить только один комментарий, но он, к сожалению, будет первым по списку, а не последним.

Чтобы выводить последний комментарий, нужно переписывать этот запрос и добавлять ещё как минимум один запрос.

Это осложняется тем, что текущий запрос формирует большой массив, который потом передаётся дальше.
И перелопатить это всё очень тяжело.