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

1.4.x Отображение изображений из вложений вне XenForo

Тема в разделе "Вопросы и ответы по XenForo Framework", создана пользователем SAS1024, 17.06.2015.

Загрузка
  1. SAS1024

    SAS1024 Местный

    Регистрация:
    23.04.15
    Сообщения:
    85
    Симпатии:
    87
    Версия XF:
    1.4.10
    Небольшая предыстория:
    Я хочу выводить содержимое первого сообщения выбранной темы где-то вне XenForo. Но при выводе (использую парсинг ббкодов, который написан здесь) у меня выводятся кривые ссылки на вложение.
    Например:
    http://xf.localhost/article/attachments/24414/
    А должна быть:
    http://xf.localhost/forum/attachments/190101554d59cec43f7-png.24414/

    Если я с помощью str_replace'а быдлокодю и заменяю /article/ на /forum/, то изображение тоже не отображается.

    Скажите, а решал ли кто-нибудь такую проблему?
     
  2. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Из-за того что не используется вью класс при работе с ббкодами, отрабатывает упрошенное отображение (в классе ббкода можно глянуть ), поэтому ссылка на вложение получается без имени а только с цифровым Id. Но это не страшно скачиваться и так будет.

    Основная проблема в общей генерации ссылки. Т.е. большинство ссылок будут генерироваться не правильно (не только ббкоды). По умолчанию ксен генерирует только относительные ссылки, пока генератору ссылки не скажут обратное (префикс "full:" перед ссылкой).
    Смотреть надо XenForo_Link::buildPublicLink и XenForo_Link::_checkForFullLink
    И в _checkForFullLink видно
    что идет проверка basepath из:
    PHP:
           $paths XenForo_Application::get('requestPaths');
           
    $fullLinkPrefix $paths['fullBasePath'];
    А 'requestPaths' xenforo генерирует исходя из текущей папки запуска скрипта.
    Т.е. надо сразу после инициализации приложения посмотреть что в 'requestPaths' исправить на нужные значения и сделать XenForo_Application::set
    --- добавлено : Jun 17, 2015 7:41 AM ---
    @SAS1024 И еще - по умолчанию изображение не будет отображаться надо или ссылку конвертировать во вложение после ббкод рендера или расширять XenForo_BbCode_Formatter_Base::renderTagAttach
    Да и вообще работу рендера можно глянуть в XenForo_BbCode_Formatter_Base::renderTagAttach
     
    Последнее редактирование модератором: 25.06.2015
    SAS1024 нравится это.
  3. SAS1024

    SAS1024 Местный

    Регистрация:
    23.04.15
    Сообщения:
    85
    Симпатии:
    87
    Версия XF:
    1.4.10
    Yoskaldyr, спасибо, с fullBasePath разобрался. Теперь пути к вложениям генерятся нормально. Что самое интересное - пути к смайликам все-равно остаются относительными.

    Еще посмотрел XenForo_BbCode_Formatter_Base::renderTagAttach. Получается что он, если вьюхи не указано, просто делает ссылку и всё. Это печально.

    https://xenforo.com/community/threads/parsing-bbcode-on-external-page-attachments-problem.77994/
    Вот здесь человек столкнулся с похожей проблемой, но мой уровень английского не позволяет мне понять что ему посоветовали :(
     
  4. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    @SAS1024 Ну там посоветовали делать 1 в 1 как в контроллере Thread actionIndex и во вьюхе Thread renderHtml
    Но это реально муторно - для отображения надо получить все вложения и их передавать в ббкод парсер (необходимо если нужно получить миниатюру)
    Если на стороннем скрипте нужно отображение всегда полного размера и не нужна никакая проверка прав, то проще расширить XenForo_BbCode_Formatter_Base::renderTagAttach и передавать какой-либо extraStates в рендер:
    Например, передаем в рендер extraStates ('myRender' => true)
    PHP:
    $formatter XenForo_BbCode_Formatter_Base::create'Base'$options );
    $parser = new XenForo_BbCode_Parser$formatter );
    return 
    $parser->render$text, array('myRender' => true));
    потом в расширенном методе
    PHP:
    public function renderTagAttach(array $tag, array $rendererStates)
    {
        if (!empty(
    $rendererStates['myRender']))
        {
            
    $id intval($this->stringifyTree($tag['children']));
            if (!
    $id)
            {
                return 
    '';
            }
            return 
    '<img alt="'.$id.'" src="' XenForo_Link::buildPublicLink('full:attachments', array('attachment_id' => $id)) . '"/>';
        }
        return 
    parent::renderTagAttach($tag$rendererStates);
    }
     
    Mirovinger и SAS1024 нравится это.
  5. SAS1024

    SAS1024 Местный

    Регистрация:
    23.04.15
    Сообщения:
    85
    Симпатии:
    87
    Версия XF:
    1.4.10
    Yoskaldyr, очень благодарю за помощь, всё получилось :)
     
    Yoskaldyr нравится это.
  6. PaulZibert

    PaulZibert Активный пользователь

    Регистрация:
    19.07.18
    Сообщения:
    3
    Симпатии:
    0
    Версия XF:
    1.5.21
    Друзья, подскажите как решить вопрос. При переносе форума с 1.4.2. до 1.5.21 все аттачи перенеслись.
    Но, там где стоял тег [FULL], фотографии не отображаются.

    1.jpg

    Они начинаются отображаться только если редактировать пост, и заново нажать что вставить как "полное изображение".

    2.jpg


    Есть ли возможно как то все фото на форуме сделать отображаемыми, или каждое фото придётся "перевставлять"?

    Может кто то сталкивался..
     

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