[GX] Парсинг JSON + member_list_item

Парсим дополнительные поля пользователя из JSON.

Метки:
  1. Dima32
    Совместимость с XenForo:
    • XenForo 1.5
    Вы наверное сталкивались с такой проблемой, вывести в карточках пользователя (дополнительные поля, но они хранятся в формате JSON).И на выводе, вы видите что-то такое

    В шаблоне [LINECODE]member_list_item[/LINECODE]
    При попытке вывести дополнительные поля {xen:helper dump, $user.custom_fields}
    Код:
    a:7{s:3:"aim";s:0:"";s:8:"facebook";s:0:"";s:3:"icq";s:0:"";s:5:"skype";s:22:"shevchenko_george_1995";s:7:"twitter";s:0:"";s:5:"yahoo";s:0:"";}
    Хелпер,который парсит этот самый JSON. Чтобы можно было спокойно без всяких заморочек, обращаться к дополнительным полям.

    Инструкция:

    1) Включаем режим отладки (в папке library -> config.php)
    $config['debug'] = true;


    2)
    Переходим по ссылке /admin.php?add-ons/add Нам нужно создать дополнение и привязать его к нашему будущему парсингу Json.

    ID дополнения: gx_json_parser
    Заголовок: [GX] Helper (Json)
    Информация о версии: 1.0.0
    Номер версии: 1

    Жмем сохранить дополнение.

    Готово, мы создали дополнение пустое, к которому теперь всё будем цеплять.

    3) Заходим на наш FTP и создаем в папке library-> папку GX в ней создаем папку Json.
    После того как мы создали папки, переходим в конечную папку Json. И создаем 2 файла.
    • Helpers.php
    • Listener.php
    И так мы создали, проверьте кодировку, должна быть UTF-8 (Без BOM).

    Открываем файл Helpers.php
    И вставляем туда этот код

    Код:
    <?php
    class GX_Json_Helpers
    {
        public static function JsonGXHelpers ($text)
        {
            $myFields = unserialize($text);
            $NewArr = array('fields' => $myFields);
        
            $newArray = array();
            foreach ($NewArr as $key => $value) {
                $newArray[$key] = $value;
            }
            return $newArray;
        }
    }

    Сохраняем его и закрываем файл.

    Открываем теперь файл Listener.php
    И вставляем туда этот код

    Код:
    <?php
    class GX_Json_Listener
    {
        public static function init(XenForo_Dependencies_Abstract $dependencies, array $data)
        {
            XenForo_Template_Helper_Core::$helperCallbacks += array(
                'json_gx' => array('GX_Json_Helpers', 'JsonGXHelpers'),
            );
        }
    }
    Сохраняем его и закрываем файл.
    С файлами всё готово.

    4) Идём обратно в админку.
    Переходим во вкладку Разработка
    Потом выбираем Обработчики Событий
    Нажимаем создать новый обработчик события

    Обрабатывать событие: init_dependencies
    Подсказка события: [GX] Helper (Json)
    Выполнить обработчик: GX_Json_Listener::init
    Дополнение: [GX] Helper (Json)

    Сохранить жмем.
    И так, теперь наш helper json работает. Осталось его применить.


    5) Создаем модификацию шаблонов /admin.php?template-modifications/add

    Шаблон: member_list_item
    Ключ модификации: gx_json_parser
    Тип поиска: Простая замена
    Найти:<xen:require css="xenforo_member_list_item.css" />
    Замена:
    Код:
    <xen:require css="xenforo_member_list_item.css" />
    <xen:set var="{$gx}" value="{xen:helper json_gx, $user.custom_fields}" />
    Дополнение: [GX] Helper (Json)
    Жмем сохранить.

    6) Теперь вы можете выводить свои дополнительные поля.

    Вместо такого вида
    1json.png

    Вот такой вид будет
    2json.png


    Обращаться вот так к полям.
    {$gx.fields.aim}
    {$gx.fields.facebook}
    {$gx.fields.icq}
    {$gx.fields.skype}
    {$gx.fields.twitter}
    {$gx.fields.yahoo}

    Как своё поле использовать:
    {$gx.fields.тут_id_вашего_поля}

    Важно: Все манипуляции проводил в шаблоне member_list_item
Поделиться этой страницей в