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

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

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
будет выводить только один комментарий, но он, к сожалению, будет первым по списку, а не последним.

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

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