[Решено] Использование токенов в модуле rules при выполнении произвольного php кода

Главные вкладки

Аватар пользователя petrowsb petrowsb 5 февраля 2017 в 18:48

Здравствуйте. drupal 7, Ubercart
Создал правило на событие "Покупатель завершает оформление заказа"
Действие - выполнение произвольного php кода.
Там доступны для использования подстановочные шаблоны (токены), например:

[site:name] Название Название сайта.
[site:slogan] Девиз Девиз сайта.
[order:total] Итого Общая стоимость заказа.
[order:email] Email Основной email-адрес заказа.
[order:products] Товары Список товаров в заказе.

Целый день туплю, не могу получить к ним доступ.
Для начала хотелось бы просто вывести значения токенов в файл, просто для того чтобы понять как их использовать, хотя бы этот для начала [site:name]

<?php
// пытаемся вставить значение в файл
file_put_contents("sites/default/files/iiko/file.txt"'Какой-то текст'); // так работает
file_put_contents("sites/default/files/iiko/file.txt", [site:name]); // НЕ работает, файл пустой
file_put_contents("sites/default/files/iiko/file.txt"token_replace('[site:name]')); // НЕ работает, файл пустой
file_put_contents("sites/default/files/iiko/file.txt"print_r($site)); // раз не получается получить значение токена
file_put_contents("sites/default/files/iiko/file.txt"$site_name); //  пытаюсь использовать указанные на странице переменные
file_put_contents("sites/default/files/iiko/file.txt"print_r($site_name)); // но тоже ничего не выходит
?>

Подскажите пожалуйста, что я не так делаю??? Много читал про token_replace, но так и не понял как её использовать в данном контексте, в сети полно примеров с node и user, но у меня site и order. Как можно достучаться до этих токенов?

Лучший ответ

Аватар пользователя petrowsb petrowsb 6 февраля 2017 в 17:51

Разобрался со своей проблемой. Основная загвоздка оказалась в том, что в данном модуле почему-то не работает переменная $site, а так-же некоторые из токенов [site:xxx], в частности [site:name] и [site:url], а вот переменная $order и токены [order:xxx] работают замечательно, а именно они то мне были и нужны. А я вчера зацепился за этот [site:name] только потому, что он был первым в списке.
Единственный нюанс - токены в коде надо заключать в кавычки, тогда они будут срабатывать. Следовательно, вопрос закрыт.

<?php
$result 
"[order:order-number]";  // Номер заказа выводится нормально
file_put_contents("sites/default/files/iiko/file.txt","Идентификатор заказа:          " $result);  

$result "[order:email]"// Почта выводится нормально
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Основной e-mail заказа:         " $result,  FILE_APPEND);  

file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Контактные данные:",  FILE_APPEND); 

$result "[uc-webform-11-telefon]";  // токен поля модуля webform checkout pane почему-то выводит номер телефона в квадратных скобках
$result "uc-webform-11-telefon";  //  а так нормально!
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Телефон:         " $result,  FILE_APPEND); 

$result print_r($ordertrue); // выводится массив переменной $order
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Данные заказа:         " $result,  FILE_APPEND);  

$result print_r($sitetrue); // а вот массив переменной $site НИЧЕГО не выводит
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Информация о сайте:         " $result,  FILE_APPEND);  

$result "[site:name]"// а когда пытаемся вывести токен [site:name], то скрипт НЕ работает целиком и полностью, т.е запись в файл вообще не происходит
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Информация о сайте:         " $result,  FILE_APPEND);  

$result "[site:current-date]"// текущая дата выводится нормально
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Текущая дата:         " $result,  FILE_APPEND);  
?>

Комментарии

Аватар пользователя bumble bumble 5 февраля 2017 в 19:49
1

Жесть... Ладно.

Токены (заменители) - это переменные, по-сути.

Если Вы уже выполняете PHP-код, зачем вам в нем лишняя прослойка в виде токенов, если Вы можете использовать непосредственно переменные? Они, кстати, тоже обычно описываются на странице настройки действия ("Список доступных переменных").

И по методам Вашего "дебаггинга", с записью в файл - крайне советую освоить Devel, и его ф-цию dpm(). Тут есть информация.

Аватар пользователя bumble bumble 5 февраля 2017 в 19:59
1

ЗЫ - по вопросу, собственно:

Токены используются для подстановки значений в текст (который проходит через фильтр с поддержкой токенов), например:

Привет, [user:name]!

Ты на сайте [site:name]

При выводе будет заменен на:

Привет, petrowsb!

Ты на сайте Drupal.ru

Аватар пользователя petrowsb petrowsb 5 февраля 2017 в 20:06

Просто дайте пример как вывести хотя бы имя сайта через переменную, у меня это тоже не выходит как видно из кода выше, дальше разберусь. А [user:name] и прочее в php коде не работает, по крайней мере в модуле rules.

Аватар пользователя petrowsb petrowsb 5 февраля 2017 в 20:18

Это я уже пробовал, не работает в моем случае.
Вот так не пашет:

<?php
// открываем файл, если файл не существует,
//делается попытка создать его
//$fp = fopen("file.txt", "w");
$fp fopen("sites/default/files/iiko/file.txt""w"); 
// закрываем
fclose($fp);
file_put_contents("sites/default/files/iiko/file.txt"$site);  // в файле 0 байт
?>
Аватар пользователя petrowsb petrowsb 6 февраля 2017 в 17:51

Разобрался со своей проблемой. Основная загвоздка оказалась в том, что в данном модуле почему-то не работает переменная $site, а так-же некоторые из токенов [site:xxx], в частности [site:name] и [site:url], а вот переменная $order и токены [order:xxx] работают замечательно, а именно они то мне были и нужны. А я вчера зацепился за этот [site:name] только потому, что он был первым в списке.
Единственный нюанс - токены в коде надо заключать в кавычки, тогда они будут срабатывать. Следовательно, вопрос закрыт.

<?php
$result 
"[order:order-number]";  // Номер заказа выводится нормально
file_put_contents("sites/default/files/iiko/file.txt","Идентификатор заказа:          " $result);  

$result "[order:email]"// Почта выводится нормально
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Основной e-mail заказа:         " $result,  FILE_APPEND);  

file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Контактные данные:",  FILE_APPEND); 

$result "[uc-webform-11-telefon]";  // токен поля модуля webform checkout pane почему-то выводит номер телефона в квадратных скобках
$result "uc-webform-11-telefon";  //  а так нормально!
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Телефон:         " $result,  FILE_APPEND); 

$result print_r($ordertrue); // выводится массив переменной $order
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Данные заказа:         " $result,  FILE_APPEND);  

$result print_r($sitetrue); // а вот массив переменной $site НИЧЕГО не выводит
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Информация о сайте:         " $result,  FILE_APPEND);  

$result "[site:name]"// а когда пытаемся вывести токен [site:name], то скрипт НЕ работает целиком и полностью, т.е запись в файл вообще не происходит
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Информация о сайте:         " $result,  FILE_APPEND);  

$result "[site:current-date]"// текущая дата выводится нормально
file_put_contents("sites/default/files/iiko/file.txt","\r\n" "Текущая дата:         " $result,  FILE_APPEND);  
?>