1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

Помощь Помогите изменить переменную homepage в Jcomments

Тема в разделе "Joomla", создана пользователем MrBaron, 6 июн 2012.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
Статус темы:
Закрыта.
Модераторы: arman29, DMS, Genk0
  1. MrBaron

    MrBaron Создатель

    Заблокирован
    Регистр.:
    27 май 2012
    Сообщения:
    34
    Симпатии:
    1
    версия JComments 2.3.0 [20/02/2012]
    Ситуация следующая: я изменил homepage на обычное текстовое поле. В шаблоне изменил так, чтобы при добавлении комментария в БД записывается именно строка, как я ее указываю. Также все корректно, когда я именяю комментарий в админке - оттуда тоже забирается текст из поля homepage и как надо записывается в БД.

    Проблема: когда я из фронт-енда редактирую комментарий, записывая в homepage строку, она не проходит проверку (где-то в каком-то файле) на url адрес, т.е. если при редактировании пишу, например, www.ya.ru - то, проходит проверку, что это адрес + достраивается до http://www.ya.ru. А если я просто напишу туда русские буквы, то в БД ничего не записывается.

    Помощь нужна только в подсказке: где искать эту проверку на URL, в каком файле? я их перелопачивал, ну никак не могу вычислить. Вообще классно было бы, если кто-нибудь подсказал в какой строке это менять надо))

    я подозреваю, что это в jcomments.ajax.php, т.к. из jcomments-v2.3.js данные вроде туда передаются.

    т.е. мне тупо надо чтобы было присваивание, типа: $component->homepage = $_POST['homepage']
     
  2. vitmar

    vitmar Постоялец

    Регистр.:
    27 апр 2012
    Сообщения:
    84
    Симпатии:
    40
    Если я правильно понял твою задачу, то:
    совершенно верно, именно в этом файле строка 757
    PHP:
    $comment->homepage JCommentsText::url($values['homepage']);
    тут проверяется homepage функцией url() и если там просто текст, то $comment->homepage будет пустая строка.
    Замени эту строку на
    PHP:
    $comment->homepage stripslashes((string)$values['homepage']);
     
    MrBaron нравится это.
  3. MrBaron

    MrBaron Создатель

    Заблокирован
    Регистр.:
    27 май 2012
    Сообщения:
    34
    Симпатии:
    1
    привет! спасибо за ответ, но это я тоже сделал, сразу же, забыл написать, т.к. сам забыл =) я подозреваю, что этот кусок из jcomments.ajax.php отвечает за загрузку данных комментария для редактирования.

    PHP:
    public static function editComment($id$loadForm 0)
    {
    if (
    JCommentsSecurity::badRequest() == 1) {
    JCommentsSecurity::notAuth();
    }
     
    $user JCommentsFactory::getUser();
    $db JCommentsFactory::getDBO();
    $response JCommentsFactory::getAjaxResponse();
    $comment = new JCommentsTableComment($db);
     
    if (
    $comment->load((int) $id)) {
    $acl JCommentsFactory::getACL();
     
    if (
    $acl->isLocked($comment)) {
    $response->addAlert(JText::_('ERROR_BEING_EDITTED'));
    } else if (
    $acl->canEdit($comment)) {
    $comment->checkout($user->id);
     
    $name = ($comment->userid) ? '' JCommentsText::jsEscape($comment->name);
    $email = ($comment->userid) ? '' JCommentsText::jsEscape($comment->email);
    $homepage JCommentsText::jsEscape($comment->homepage);
    $text JCommentsText::jsEscape(JCommentsText::br2nl($comment->comment));
    $title JCommentsText::jsEscape(str_replace("\n"''JCommentsText::br2nl($comment->title)));
     
    if (
    intval($loadForm) == 1) {
    $form JComments::getCommentsForm($comment->object_id$comment->object_grouptrue);
    $response->addAssign('comments-form-link''innerHTML'$form);
    }
    $response->addScript("jcomments.showEdit(" $comment->id ", '$name', '$email', '$homepage', '$title', '$text');");
    } else {
    $response->addAlert(JText::_('ERROR_CANT_EDIT'));
    }
    }
    return 
    $response;
    }
    а здесь он сохраняется - это я все поправил, как раз это и отвечает за сохранение везде, кроме, когда редактируешь, т.е. когда используется Ajax.

    PHP:
        public static function saveComment($values = array())
        {
            if (
    JCommentsSecurity::badRequest() == 1) {
                
    JCommentsSecurity::notAuth();
            }
     
            
    $db JCommentsFactory::getDBO();
            
    $config JCommentsFactory::getConfig();
     
            
    $response JCommentsFactory::getAjaxResponse();
            
    $values self::prepareValues($_POST);
            
    $comment = new JCommentsTableComment($db);
            
    $id = (int) $values['id'];
     
            if (
    $comment->load($id)) {
                
    $acl JCommentsFactory::getACL();
     
                if (
    $acl->canEdit($comment)) {
                    if (
    $values['comment'] == '') {
                        
    self::showErrorMessage(JText::_('ERROR_EMPTY_COMMENT'), 'comment');
                    } else if ((
    $config->getInt('comment_maxlength') != 0)
                        && (
    $acl->check('enable_comment_length_check') == 1)
                        && (
    JCommentsText::strlen($values['comment']) > $config->getInt('comment_maxlength'))) {
                        
    self::showErrorMessage(JText::_('ERROR_TOO_LONG_COMMENT'), 'comment');
                    } else if ((
    $config->getInt('comment_minlength') != 0)
                        && (
    $acl->check('enable_comment_length_check') == 1)
                        && (
    JCommentsText::strlen($values['comment']) < $config->getInt('comment_minlength'))) {
                        
    self::showErrorMessage(JText::_('ERROR_YOUR_COMMENT_IS_TOO_SHORT'), 'comment');
                    } else {
                        
    $bbcode JCommentsFactory::getBBCode();
     
                        
    $comment->comment $values['comment'];
                        
    $comment->comment $bbcode->filter($comment->comment);
                        
    $comment->published $acl->check('autopublish');
     
     
                        if ((
    $config->getInt('comment_title') != 0) && isset($values['title'])) {
                            
    $comment->title stripslashes((string)$values['title']);
                        }
     
                        if ((
    $config->getInt('author_homepage') == 1) && isset($values['homepage'])) {
                            
    //$comment->homepage = JCommentsText::url($values['homepage']);
                            
    $comment->homepage $values['homepage'];
                        } else {
                            
    $comment->homepage '';
                        }
     
                        
    $result JCommentsEvent::trigger('onJCommentsCommentBeforeChange', array(&$comment));
     
                        if (
    in_array(false$resulttrue)) {
                            return 
    $response;
                        }
     
                        
    $comment->store();
                        
    $comment->checkin();
     
                        
    JCommentsEvent::trigger('onJCommentsCommentAfterChange', array(&$comment));
     
                        if (
    $config->getInt('enable_notification') == 1) {
                            if (
    $config->check('notification_type'1) == true) {
                                
    JComments::sendNotification($commentfalse);
                            }
                        }
                        
    $html JCommentsText::jsEscape(JComments::getCommentItem($comment));
                        
    $response->addScript("jcomments.updateComment(" $comment->id ", '$html');");
                    }
                } else {
                    
    $response->addAlert(JText::_('ERROR_CANT_EDIT'));
                }
            }
            return 
    $response;
        }
    собственно вопрос остался открытым. Я не могу найти место, куда именно передает данные Ajax передает. Как раз там и происходит проверка на корректность URL. прошу помощи!
     
  4. vitmar

    vitmar Постоялец

    Регистр.:
    27 апр 2012
    Сообщения:
    84
    Симпатии:
    40
    Я у себя тестировал. После замены этой строки все отлично именно при редактировании из фронтенда.
    Может ты что-то перемудрил? Версия компонента у меня та же.
     
    MrBaron нравится это.
  5. MrBaron

    MrBaron Создатель

    Заблокирован
    Регистр.:
    27 май 2012
    Сообщения:
    34
    Симпатии:
    1
    PHP:
    $config->getInt('author_homepage') == 1
    у меня почему-то равно 3м. грохнул эту дерективу и просто проверяю на существование, хотя она всегда будет ненулевая, и все заработало! Спасибо за помощь, Vitmar!
     
Статус темы:
Закрыта.