Здравствуйте. 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. Как можно достучаться до этих токенов?
Комментарии
Жесть... Ладно.
Токены (заменители) - это переменные, по-сути.
Если Вы уже выполняете PHP-код, зачем вам в нем лишняя прослойка в виде токенов, если Вы можете использовать непосредственно переменные? Они, кстати, тоже обычно описываются на странице настройки действия ("Список доступных переменных").
И по методам Вашего "дебаггинга", с записью в файл - крайне советую освоить Devel, и его ф-цию dpm(). Тут есть информация.
ЗЫ - по вопросу, собственно:
Токены используются для подстановки значений в текст (который проходит через фильтр с поддержкой токенов), например:
Ты на сайте [site:name]
При выводе будет заменен на:
Ты на сайте Drupal.ru
Просто дайте пример как вывести хотя бы имя сайта через переменную, у меня это тоже не выходит как видно из кода выше, дальше разберусь. А [user:name] и прочее в php коде не работает, по крайней мере в модуле rules.
Доступные переменные:
$site
$order
Как получить имя сайта? Через $site?
<?php
return $site->name;
?>
UPD
Это я уже пробовал, не работает в моем случае.
Вот так не пашет:
<?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 байт
?>
А чтоб проверить что есть в $site - можно посмотреть ее через dpm(), как я выше писал.
<?php
dpm($site);
?>
Ладно, щас с dpm буду разбираться, спасибо хоть на этом
$site_name = variable_get('site_name');
а для токенов, https://api.drupal.org/api/drupal/includes!token.inc/function/token_repl...
но да, то что вы творите это п.ц
Разобрался со своей проблемой. Основная загвоздка оказалась в том, что в данном модуле почему-то не работает переменная $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($order, true); // выводится массив переменной $order
file_put_contents("sites/default/files/iiko/file.txt","\r\n" . "Данные заказа: " . $result, FILE_APPEND); $result = print_r($site, true); // а вот массив переменной $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);
?>