Иконка ресурса

Использование PHP в виджетах

bdrv

Проверенные
Сообщения
567
Реакции
424
Баллы
3,365
Owliwka добавил(а) новый ресурс:

Использование PHP в виджетах - Инструкция об использовании PHP в виджетах XF2

Я не знаю почему до сих пор это не залили в ресурсы, поэтому сделаю это сам.
Автор мануала CMTV. Большое ему спасибо за эту инструкцию.

Создаем PHP файл MyWidget.php по пути src/addons
PHP:
<?php

class MyWidget {
    public static function renderWidget(\XF\Widget\AbstractWidget $abstractWidget)
    {
    
        /* Сюда вставь нужный код из твоих PHP файлов */
    
        return $abstractWidget->renderer('my_widget', [
            //...

Узнать больше об этом ресурсе...
 
А ява-скрипт как использовать? Например код для Google AdSense или другой рекламной сети?
 
А через это можно разместить html-ссылки в сообщении?
 
К сожалению, не работает html, или я не знаю как. Например, если добавить в виджет скриптик рандома (из темы php для первой ветки), получится так:

PHP:
<?php

class MyWidget {
    public static function renderWidget(\XF\Widget\AbstractWidget $abstractWidget)
    {

$banners[] = '<b>123</b>';
$banners[] = '<b>342</b>';

shuffle($banners);

        return $abstractWidget->renderer('my_widget', [
            // Здесь нужно указать параметры, которые нужно отображать в виджете
            'param_1' => $banners[0],
        ]);
    }
}

?>

По идее должны рандомно выводится толстые числа 123 и 342, но теги html не работают, а выводится как есть всё значение, т. е.

<b>123</b>

- прямо так, с тегами. Невозможно форматировать, вывести картинку. Если добавить вывод в сам код рандома:

PHP:
<?php

class MyWidget {
    public static function renderWidget(\XF\Widget\AbstractWidget $abstractWidget)
    {

$banners[] = '<b>123</b>';
$banners[] = '<b>342</b>';

shuffle($banners);
echo $banners[0];

        return $abstractWidget->renderer('my_widget', [
            // Здесь нужно указать параметры, которые нужно отображать в виджете
            'param_1' => $banners[0],
        ]);
    }
}

?>

выводится второй раз вне виджета, просто на странице, когда браузер находит скрипт. Там форматирование работает, но ведь нам нужно добавить в виджет.
Как добиться поддержки html? Подскажите, пожалуйста.
 
rio, и зачем здесь виджет? Напишите, что вам сразу нужно и точно.
 
  • Мне нравится
Реакции: rio
Имхо многим пригодится, уточнить мануал "Использование PHP в виджетах", и тема так называется... Сейчас этот мануал не учитывает теги баннеров и текста.
Нужно вывести в боковую панель портала рандомный текст со своей картинкой и форматированием, и вариантов для рандома очень много. Наверное можно прямо в шаблоне сделать, но ещё слабо знаю ксенфоро, и всё равно придётся как-то добавлять php...

Captain, из твоего ответа делаю вывод, что использовать php в виджетах нельзя (или очень трудно), если надо выводить html. Так?
 
Последнее редактирование:
@Captain, из твоего ответа делаю вывод, что использовать php в виджетах нельзя (или очень трудно), если надо выводить html. Так?
Не так. Рендерите шаблон и делайте {{ $option|raw }} в шаблоне
 
rio, так шаблон рендерится
$banners[] = '<b>123</b>'; $banners[] = '<b>342</b>';
К чему это не понятно.
Сейчас этот мануал не учитывает теги баннеров и текста.
Ну это всё указывается в шаблоне
Нужно вывести в боковую панель портала рандомный текст со своей картинкой и форматированием, и вариантов для рандома очень много. Наверное можно прямо в шаблоне сделать, но ещё слабо знаю ксенфоро, и всё равно придётся как-то добавлять php...
Ну вполне хватит стандартного виджета HTML и в нём уже прописать всё необходимое и воспользоваться функцией rand() для случайного вывода баннеров с текстом.
 
Всем привет! Через API VK вытащил картинки, хочу сделать слайдер из них, на php выводится нормально таким циклом
Код:
foreach($result["response"]["items"] as $photo) {
echo("<div><img src='".$photo["photo_604"]."'></div>");
}
Как это вывести в шаблон по этому мануалу?)))
Параметры понятно, но echo это не параметр...

CSS и все обработки в шаблоне сделаю, как туда php вытянуть?.
 
Код:
<?php

class MyWidget {
    public static function renderWidget(\XF\Widget\AbstractWidget $abstractWidget)
    {
        $my_result = '';
        foreach($result["response"]["items"] as $photo)
        {
            $my_result .= $photo["photo_604"]
        }

        return $abstractWidget->renderer('my_widget', [
            'my_result' => $my_result,
        ]);
    }
}

Ну и конечно же в своём виджете:
Код:
<div>
<img src="{{ my_result|raw }}" />
</div>
 
Последнее редактирование:
f1nik25, передавать массив картинок и в шаблоне циклом перебирать.
 
f1nik25, <xf:foreach>. Примеров в движке масса, поиск по шаблонам в помощь.
 
Тема условия переменных, я уже прям всё расписал и даже больше. Я же дал готовый вариант
 
$my_result = ''; foreach($result["response"]["items"] as $photo) { $my_res
Код:
<?php

class MyWidget {
    public static function renderWidget(\XF\Widget\AbstractWidget $abstractWidget)
    {
        $my_result = '';
        foreach($result["response"]["items"] as $photo)
        {
            $my_result .= $photo["photo_604"]
        }

        return $abstractWidget->renderer('my_widget', [
            'my_result' => $my_result,
        ]);
    }
}

Ну и конечно же в своём виджете:
Код:
<div>
<img src="{{ my_result|raw }}" />
</div>
Ошибка при создании виджета (php обработчик). Ругается на синтаксис
Код:
<img src="{{ my_result|raw }}" />
Опять же $my_result это массив, как он в шаблоне то будет выводиться? Его де перебрать надо (или я чего то не понмиаю☹


По xf:forech логика вроде ясна, как сам массив (переменную) отдать в шаблон? Пусть в php файле будет переменная $result которая явлется многомерным массивом ее return'ом из класа забираем, в шаблон вставляем через {result}? А дальше перебираем
Код:
<xf:foreach $result["response"]["items"] value="$photo">
<div><img src='$photo["photo_604"]'></div>
</xf:foreach>

Так?)))
 
Ну ошибка же видно, чуть чуть подумать
<img src="{{ my_result|raw }}" />
Заменить на
<img src="{{ $my_result|raw }}" />
Ну пропустил символ, можно же было бы догадаться?
 
  • Мне нравится
Реакции: Hope
Конечно не так. Ну я же скинул сверху ссылку с синтаксисом цикла. Там даже сообщением ниже есть кусок шаблона с примером, как обращаться к массиву
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу