1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

1.2.x Похожие темы

Тема в разделе "Для новичков", создана пользователем aligon7, 10.07.2013.

Загрузка
  1. aligon7

    aligon7 Местный

    Регистрация:
    22.12.12
    Сообщения:
    997
    Симпатии:
    66
    Версия XF:
    1.4.7
    Чуть позже, спасибо, я на телефоне
     
  2. Oleg-2012

    Oleg-2012 Местный

    Регистрация:
    21.04.12
    Сообщения:
    700
    Симпатии:
    297
    Спасибо за подсказку, да этот приём решает проблему, я что-то вообще не с той стороны подошёл, в начале подумал, что он какую-то функцию не находит, надо-было сразу спросить, спасибо ! :)

    Кстати автор плагина так и профиксил, только он почему-то не стал проверять массив параметров, т.е. проверяет так:
    Код:
    (isset($response->params['thread']['similar_threads']))


    В этоге код получился такой:
    Код:
    <?php
     
    class ShowSimilarThreads_ControllerPublic_Thread extends XFCP_ShowSimilarThreads_ControllerPublic_Thread
    {
        public function actionIndex()
        {
            $response = parent::actionIndex();
     
            if (isset($response->params['thread']['similar_threads']))
            {
                $response->params['similarThreads'] = $this->getModelFromCache('ShowSimilarThreads_Model_SimilarThreads')->getSimilarThreadsByIds(explode(",", $response->params['thread']['similar_threads']), $response->params['forum']);
            }
     
            return $response;
        }
    }
    Оба решения рабочии, так ради самообразования, какое лучше ?;)
     
  3. akinak

    akinak Местный

    Регистрация:
    12.02.13
    Сообщения:
    259
    Симпатии:
    243
    Версия XF:
    1.1.3
    Код:
    if (isset($response->params['thread']['similar_threads']))
    это лучше.
    Может быть ситуация, что есть массив $response->params['thread']
    но в этом массиве нет ключа similar_threads.
     
    Mirovinger и Oleg-2012 нравится это.
  4. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Все просто. Моя проверка гарантирует при любых вариантах отсутствие ошибки или предупреждения. Так как is_array($response->params) проверяет, а есть ли вообще такой массив, а следом проверяется наличие в этом массиве нужной переменной isset($response->params['thread']). Таким образом, даже при отсутствии массива или элемента массива не будет сгенерирована ошибка. А проверка isset($response->params['thread']['similar_threads']) в некоторых случаях не гарантирует безошибочную работу.
    Так как я придерживаюсь принципа, что лучше по максимуму написать гарантированный результат, в том числе при неправильно возвращенных параметрах, то я и написал полный вариант проверки. Вы можете использовать сокращенный, который в подавляющем большинстве случаев работать будет, хотя не гарантирует на 100% корректной работы в случае некорректного возвращенного параметра из родительского метода.
    Оверхед по времени тут не большой, поэтому на производительность это никак серьезно повлиять не может. Так что смотрите сами, нужна ли полная проверка или нет.
     
    Oleg-2012 нравится это.
  5. akinak

    akinak Местный

    Регистрация:
    12.02.13
    Сообщения:
    259
    Симпатии:
    243
    Версия XF:
    1.1.3
    Ошибка будет сгенерирована, если массив $response->params['thread'] существует, но в нем нет ключа 'similar_threads'
    Именно этот ключ дальше по коду используется. Причем, этот ключ не родной для ксена, поэтому его вполне может не быть.
    Ну там забыл разработчик в какой-то ситуации в этот ключ что-то записать например, это надо в других частях кода уже смотреть.
    В тоже время, если нет $response->params то и isset($response->params['thread']['similar_threads']) будет false. Поэтому ошибки не будет, код ниже не отработает.
    Так что Вы не правы :)
     
    Oleg-2012 нравится это.
  6. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Нет. Не так даже. То, что разработчик переделал, не достаточно. Нужна в том числе проверка на то, является ли это массивом. Дело в том, что в случае передачи в качестве params строки, а не массива, будет сгенерирована ошибка. Просто тогда нужно помимо моей проверки модифицировать еще и следующую проверку. Получится как-то так:
    Код:
    if (is_array($response->params) && isset($response->params['thread'])) {
       if (is_array($response->params['thread']) && isset($response->params['thread']['similar_threads']))
    
     
    Oleg-2012 нравится это.
  7. akinak

    akinak Местный

    Регистрация:
    12.02.13
    Сообщения:
    259
    Симпатии:
    243
    Версия XF:
    1.1.3
    Да, согласен, так лучше всего.
     
    Oleg-2012 нравится это.
  8. Oleg-2012

    Oleg-2012 Местный

    Регистрация:
    21.04.12
    Сообщения:
    700
    Симпатии:
    297
    Автор обновил плагин, исправил баг с правами, в старой версии отображались темы из-закрытых разделов, в новой версии профиксил это !
     
    Mirovinger нравится это.
  9. Alex777

    Alex777 Местный

    Регистрация:
    16.04.11
    Сообщения:
    89
    Симпатии:
    13
    Версия XF:
    1.4.6
    А руссификатор есть для него, купил его, вот как словосочетание Similar Threads поправить Оттображение похожих тем.
     
  10. Exile

    Exile Местный

    Регистрация:
    27.06.11
    Сообщения:
    997
    Симпатии:
    545
    Версия XF:
    1.4.4
    Alex777, в админке в разделе внешнего вида есть поиск по фразам.
     
    Alex777 нравится это.

Поделиться этой страницей