Перейти к содержимому

Формирование имени покупателя

Как RadicalMart собирает строку имени из имени, отчества и фамилии, и как изменить порядок вывода через языковые константы Joomla.

Общий принцип

Метод

UserHelper::nameToString()
Для формирования строки используется helper RadicalMart. Метод принимает данные покупателя и возвращает обычную строку, собранную из непустых частей имени. Полное подключение показано ниже в примере вызова.

Данные

array, JSON, Registry
Входные данные могут быть массивом, JSON-строкой или объектом Registry. Метод использует только ключи first_name, second_name и last_name.

Формула

language constants
Порядок частей имени задаётся языковой константой. Поэтому порядок можно менять через переопределения языка Joomla отдельно для сайта и админки, не меняя PHP-код.

Поля имени

  • Имя покупателя. Если значение непустое, в постфикс формулы добавляется буква F.
  • Отчество. Если значение непустое, в постфикс формулы добавляется буква S.
  • Фамилия. Если значение непустое, в постфикс формулы добавляется буква L.
  • Постфикс строится в фиксированном порядке first_name, second_name, last_name. Порядок ключей во входном массиве на постфикс не влияет.

Пример вызова

array input
<?php
use Joomla\Component\RadicalMart\Administrator\Helper\UserHelper;

$data = [
'first_name' => 'Иван',
'second_name' => 'Иванович',
'last_name' => 'Петров',
];

$name = UserHelper::nameToString($data);
// Петров Иван Иванович

Как выбирается формула

1. Собирается постфикс

F / S / L
Метод смотрит, какие из трёх ключей непустые. Например, имя + фамилия дают постфикс FL, а полные имя + отчество + фамилия дают FSL.

2. Ищется точная константа

COM_RADICALMART_USER_NAME_FORMULA_*
Если существует константа с таким постфиксом, используется она. Для полного набора данных это COM_RADICALMART_USER_NAME_FORMULA_FSL.

3. Есть fallback

COM_RADICALMART_USER_NAME_FORMULA
Если специальной константы нет, используется базовая формула COM_RADICALMART_USER_NAME_FORMULA. Из неё всё равно берутся только непустые значения.

Формулы, которые уже есть

ru-RU и en-GB
COM_RADICALMART_USER_NAME_FORMULA="first_name,second_name,last_name"
COM_RADICALMART_USER_NAME_FORMULA_FS="first_name,second_name"
COM_RADICALMART_USER_NAME_FORMULA_FL="first_name,last_name"
COM_RADICALMART_USER_NAME_FORMULA_SL="second_name,last_name"
COM_RADICALMART_USER_NAME_FORMULA_FSL="last_name,first_name,second_name"

Примеры результата

Иван + Иванович + Петров

FSL
Используется COM_RADICALMART_USER_NAME_FORMULA_FSL = last_name,first_name,second_name. Результат: Петров Иван Иванович.

Иван + Петров

FL
Используется COM_RADICALMART_USER_NAME_FORMULA_FL = first_name,last_name. Результат: Иван Петров.

Иван + Иванович

FS
Используется COM_RADICALMART_USER_NAME_FORMULA_FS = first_name,second_name. Результат: Иван Иванович.

Иванович + Петров

SL
Используется COM_RADICALMART_USER_NAME_FORMULA_SL = second_name,last_name. Результат: Иванович Петров.

Только одно поле

F, S или L
Если отдельной константы для одного поля нет, сработает базовая формула. Метод пройдёт по ней и добавит только непустое значение.

Пустые данные

empty
Если все три значения пустые или отсутствуют, результатом будет пустая строка.

Переопределение языка

Переопределяйте константы через стандартные языковые переопределения Joomla. Если имя показывается и на сайте, и в панели управления, создайте переопределение для обоих клиентов: Site и Administrator.

Пример: всегда Имя Фамилия для полного имени

language override
COM_RADICALMART_USER_NAME_FORMULA_FSL="first_name,last_name"
COM_RADICALMART_USER_NAME_FORMULA_FL="first_name,last_name"

Менять только порядок

формула
В значении константы указываются ключи данных через запятую: first_name, second_name, last_name. Текстовые разделители внутри формулы не используются; части имени соединяются пробелом.

Добавлять только существующие ключи

без произвольных полей
Метод проверяет только три ключа. Email, телефон, название компании и другие данные в строку имени этим методом не попадут.

Учитывать неполные данные

fallback
Если вы меняете только COM_RADICALMART_USER_NAME_FORMULA_FSL, неполные имена будут продолжать работать по формулам FS, FL, SL или по fallback.

Примеры для разработчика

Массив, JSON или Registry

input variants
<?php
use Joomla\Component\RadicalMart\Administrator\Helper\UserHelper;
use Joomla\Registry\Registry;

$nameFromArray = UserHelper::nameToString($contacts);
$nameFromJson = UserHelper::nameToString('{"first_name":"Иван","last_name":"Петров"}');
$nameFromRegistry = UserHelper::nameToString(new Registry($contacts));

Вывод в своём шаблоне

escape output
<?php
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\Component\RadicalMart\Administrator\Helper\UserHelper;

$name = UserHelper::nameToString($contacts);
echo HTMLHelper::_('string.truncate', htmlspecialchars($name, ENT_QUOTES, 'UTF-8'), 120);

Где используется

Создание покупателя

customer save
Если для нового покупателя не задано имя Joomla-пользователя, RadicalMart может сформировать его из контактных полей через nameToString().

Список заказов

administrator orders
В списках заказов имя контакта выводится из данных заказа через этот helper, если не используется кастомный layout покупателя.

Список покупателей

administrator customers
В списке покупателей имя из контактов может использоваться как отображаемое имя, а при его отсутствии показывается имя Joomla-пользователя.