- Совместимость с XenForo
- 1.5
Вы наверное сталкивались с такой проблемой, вывести в карточках пользователя (дополнительные поля, но они хранятся в формате JSON). И на выводе, вы видите что-то такое :-)
В шаблоне member_list_item
При попытке вывести дополнительные поля {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;
Ну или ставим любое дополнение на выбор, чтобы каждый раз не лазить в config.php
Этот этап завершен. Вы включили режим отладки.
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
Открываем файл Helpers.php
И вставляем туда этот код
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:
<?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}" />
Жмем сохранить.
6) Теперь вы можете выводить свои дополнительные поля.
И место такого вида.
Вот такой вид будет.
Обращаться вот так к полям.
{$gx.fields.aim}
{$gx.fields.facebook}
{$gx.fields.icq}
{$gx.fields.skype}
{$gx.fields.twitter}
{$gx.fields.yahoo}
Как своё поле использовать:
{$gx.fields.тут_id_вашего_поля}
Важно: я все манипуляции проводил в шаблоне member_list_item
Вот пожалуй и всё.
Если вам влом создавать файлы и вписывать всё, скачайте просто архив.
Автор: Георгий Шевченко