Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > WordPress и другие CMS
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2010, 13:10   #1
PR0Z0N
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 17
По умолчанию Virtuemart.Отзывы без регистрации

Всем добрый день!Многие наверно знают данный скрипт магазина.Там к любому товару можно оставлять отзыв,но только зарегистрированным пользователям.Я решил сделать возможность оставлять отзыв всем пользователям.Все вроде нормально,отзывы работают,незарегистрированные пользователи имеет возможность оставить отзыв,но отзыв можно оставить только один раз,независимо зарегистрирован пользователь или нет.Вроде все условия убрал,но все равно отзывы больше не оставляются.также кроме отзыва пользователь еще голосует за товар,именно это думаю и делает ограничение.Как убрать это ограничение и сделать чтобы оценка пользователя учитывалась только один раз независимо от кол-ва отзывов?Вот собственно сам код:
Проверка данных из формы,и запись в бд:
PHP код:
        function process_review( &$d ) {
        global 
$db$auth$perm$VM_LANG$vmLogger$mosConfig_offset;


            
$d["comment"] = trim($d["comment"]);
            if( 
strlen$d["comment"] ) < VM_REVIEWS_MINIMUM_COMMENT_LENGTH ) {
                
$vmLogger->errsprintf$VM_LANG->_('PHPSHOP_REVIEW_ERR_COMMENT1',false), VM_REVIEWS_MINIMUM_COMMENT_LENGTH ));
                return 
true;
            }
            if( 
strlen $d["comment"] ) > VM_REVIEWS_MAXIMUM_COMMENT_LENGTH ) {
                
$vmLogger->errsprintf$VM_LANG->_('PHPSHOP_REVIEW_ERR_COMMENT2',false), VM_REVIEWS_MAXIMUM_COMMENT_LENGTH ));
                return 
true;
            }
            if( !isset( 
$d["user_rating"] ) || intval$d["user_rating"] ) < || intval$d["user_rating"] ) > 5) {
                
$vmLogger->err($VM_LANG->_('PHPSHOP_REVIEW_ERR_RATE',false));
                return 
true;
            }
        
            if( !
$perm->check('admin,storeadmin')) {
                
$userid $auth['user_id'];
            } elseif(!
$perm->check('demo'))
            {
              
$userid 0;
            } else
            {
             
$userid vmRequest::getInt('userid'$auth['user_id']);
            }

            
                
$commentnl2br(htmlspecialchars(vmGet($d'comment' )));
                
$published VM_REVIEWS_AUTOPUBLISH 'Y' 'N';
                
$time time() + $mosConfig_offset*60*60;
                
$fields = array('product_id' => $d['product_id'],
                                            
'userid' => $userid,
                                            
'comment' => $comment,
                                            
'user_rating' => vmRequest::getInt('user_rating'),
                                            
'published' => $published,
                                            
'time'  => $time
                                
);
                
$db->buildQuery('INSERT''#__{vm}_product_reviews'$fields );
                
$db->query();

                
$this->process_vote$d );
                
$vmLogger->info($VM_LANG->_('PHPSHOP_REVIEW_THANKYOU',false));


        return 
true
Голосование:
PHP код:
    function process_vote( &$d$previous_vote = -) {
        global 
$db$auth;



            if ((
$d["user_rating"]>=0) && ($d["user_rating"]<=5)) {
                
$sql "SELECT votes,allvotes FROM #__{vm}_product_votes WHERE product_id = '"$d["product_id"]."'";
                
$db->query$sql );
                
$db->next_record();

                if( 
$db->num_rows() < ){
                    
$sql="INSERT INTO #__{vm}_product_votes (product_id) VALUES (".$d["product_id"].")";
                    
$db->query$sql );
                    
$votes $d["user_rating"];
                    
$lastip '';
                    
$allvotes 0;
                }
                else {
                    
$allvotes=intval$db->f("allvotes") );
                    if (
$previous_vote > -1) { // If this is an edit
                        
$votes $db->f("votes");
                    } else {
                        
$votes $d["user_rating"].','.$db->f("votes");
                    }
                }
                
$currip $_SERVER["REMOTE_ADDR"];
                
$votes_arr=explode(","$votes);
                 if (
$previous_vote > -1) { // If this is an edit
                     
$i array_search($previous_vote$votes_arr); // Find a vote with the same value
                     
unset($votes_arr[$i]); // And remove it
                     
$allvotes--; // Decrement the vote counter

                     
$votes_arr[] = $d["user_rating"]; // Add the new rating in
                     
$votes implode(","$votes_arr); // Then reconstruct the string
                 
}

                
$votes_count=array_sum($votes_arr);
                
$allvotes++; // Increment the number of votes
                 
$newrating=$votes_count / ( $allvotes );
                
$newrating round$newrating );
                
$sql="UPDATE #__{vm}_product_votes SET allvotes=$allvotes, rating=$newrating, votes='$votes', lastip='$currip' WHERE product_id='".$d["product_id"]."'";
                
$db->query$sql );

            }


        return 
true;
    } 
Заранее спасибо!
PR0Z0N вне форума Ответить с цитированием
Старый 25.10.2010, 09:42   #2
PR0Z0N
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 17
По умолчанию

Все разобрался)))) Тему клозед))
PR0Z0N вне форума Ответить с цитированием
Старый 29.11.2010, 15:23   #3
Boris_V_B
Новичок
Джуниор
 
Регистрация: 15.04.2010
Сообщений: 1
По умолчанию

Цитата:
Сообщение от PR0Z0N Посмотреть сообщение
Все разобрался)))) Тему клозед))
Возникла та же проблема . Если не трудно,плз, поделитесь решением, и если можно поподробнее. Спаасибо.

Последний раз редактировалось Boris_V_B; 29.11.2010 в 15:42.
Boris_V_B вне форума Ответить с цитированием
Старый 08.04.2013, 19:06   #4
Jamshid0809
Новичок
Джуниор
 
Регистрация: 08.04.2013
Сообщений: 1
По умолчанию

HELP! HELP! HELP!
выдача сообщения на компьютере о получений файла в доступной папке по локальной сети из другого компьютера? ест такая прогамма
Jamshid0809 вне форума Ответить с цитированием
Старый 06.05.2021, 08:54   #5
DrShepard
Новичок
Джуниор
 
Регистрация: 06.05.2021
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Boris_V_B Посмотреть сообщение
Возникла та же проблема . Если не трудно,плз, поделитесь решением, и если можно поподробнее. Спаасибо.
Удалось решить эту проблему? Если да, то можете поделиться решение, пожалуйста.
DrShepard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VirtueMart Оставить отзыв без регистрации GenniY WordPress и другие CMS 0 01.07.2010 11:52
Программа Навител Навигатор 3.2 без регистрации Laserboy Софт 0 30.09.2009 15:23
Использование ActiveX без регистрации Zen2007 Общие вопросы .NET 2 10.08.2009 13:40
Создание бд без регистрации Napste® БД в Delphi 7 27.04.2009 12:44