Здравствуйте профессионалы друпала!
Научите пожалуйста, как можно записывать значения ноды напрямую в базу данных.
Есть у меня необходимость пересчитывать цены товаров в инетрнет-магазине (ubercart) из евро в рубли.
Все цены на товары мне приходят в евро и уж очень не хочется их вручную на калькуляторе пересчитывать в рубли. Для этого я бы использовала простенький скрипт на PHP исполняемый прямо в ноде товара и результат подсчета хотелось бы сразу заносить в базу данных.
Как это делается? Научите
Комментарии
Вам не стоит писать ничего напрямую в БД.
Лучше вам создать модуль. Делается это очень просто, в папке sites/all/modules/customs создайте каталог вашего модуля например sites/all/modules/customs/convert_price
В этом каталоге два файла convert_price.info с примерно таким содержимым:
name = Conver price
description = Переводит цены из евро в рубли
package = Anna
version = 7.0.0
core = 7.x
и второй файл convert_price.module, в котором должно быть примерно следующее:
<?php function convert_price_node_presave($node) {
// Запишите результат конвертации.
if (empty($node->nid)) {
// Тут цена в евро. Название поля (field_price) конечно же ваше.
$eur = $node->field_price[LANGUAGE_NONE][0]['value'];
// Реализуйте метод, который будет конвертировать валюты.
$rur = convert_eru_to_rub($eur);
$node->field_price[LANGUAGE_NONE][0]['value'] = $rur;
}
} ?>
Ну и потом включите этот ваш новый модуль.
спасибо огромное! Только проблема в том, что я на drupal6 пока что еще
Точно, не посмотрел на тэги:)
Но это не сильно меняет сути... чуть позже напишу как на 6 версии сделать.
<?php /**
// Запишите результат конвертации.
* Implements hook_form_alter()
*/
function convert_price_form_alter(&$form, &$form_state, $form_id){
if($form_id === 'form_id'){ // Вместо 'form_id' нужно подставить id вашей формы. Обычно что-то вроде YOU_CONTENT_TYPE_node_form
$form['#submit'][] = 'convert_price_form_submit'; // Это мы говорим друпалу, что при отправке формы нужно выполнить
// наш обработчик convert_price_form_submit, который объявлен ниже
}
}
function
convert_price_form_submit(&$form, &$form_state) {if (empty($form['node']->nid)) { // Тут нужно проверить, что это новый материал создаётся.
// Тут цена в евро. Название поля (field_price) конечно же ваше.
$eur = $form_state['values']['field_price'][LANGUAGE_NONE][0];
// Реализуйте метод, который будет конвертировать валюты.
$rur = convert_eru_to_rub($eur);
$form_state['values']['field_price'][LANGUAGE_NONE][0] = $rur;
}
} ?>
Подробности вот тут https://api.drupal.org/api/drupal/developer%21hooks%21core.php/function/...
Огромное спасибо! не перевелись еще добрые люди среди программистов