Таблица Variables, структура? и можно ли туда добавлять свои переменные

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

Аватар пользователя Ne_L Ne_L 7 января 2009 в 0:34

И если можно туда добавлять своё, то как всем этим пользоваться можно? Не будет ли проблем с кэшированием - вообщем поделитесь знаниями Smile не хватает.

Комментарии

Аватар пользователя neochief neochief 7 января 2009 в 5:07

(опередили сверху но все же)

Все предельно просто: variable_get(), variable_set().

Вся таблица переменных подгружается при загрузке страницы в глобальную переменную $conf. Исходя из этого, переменные стоит использовать только для того, дл чего они предназначены — для хранения настроек. Для данных используйте свои таблицы.

Аватар пользователя Ne_L Ne_L 7 января 2009 в 13:59

Ок, спасибо.
А как мне при загрузке страницы из своей таблицы в БД сделать переменные?
В каком месте прописать их значения (они будут использоваться при создании таблицы модулем Views)

Аватар пользователя Ne_L Ne_L 7 января 2009 в 16:56

это то понятно
в template.php в самом верху написал

variable_set($USD,db_result(db_query("SELECT value FROM nel_curency WHERE name = 'USD'")));

создаю тестовую ноду

print "1".$USD;
print "2".$globals['USD'];
print "3".variable_get($USD,1);

ни в одном из случаев значение переменной не выодится.

Аватар пользователя neochief neochief 7 января 2009 в 17:09

Ох, как все запущено Smile

Вы пытатесь делать все совершенно не так как нужно. Свои данные стоит подгружать перед тем, как захотите их вывести. Не нужно пихать их в таблицу переменных, что вы делаете при помощи variable_set().

Кроме того, сам способ использованя функции неправильный, нужно так:

variable_set('my_value', $value);
...
...
$value = variable_get('my_value');

Разберитесь с этим кодом, он покажет что и как необходимо делать. Или откройте первый попавшийся небольшой модуль и посмотрите в его код.

Аватар пользователя Ne_L Ne_L 7 января 2009 в 18:09

так в том то и дело (простите если не понял подсказки конечно) что мне нужно использовать переменную не только в какой то конкретной функции - мне нужно чтобы она была доступна в любом месте, в пределах сайта.
или в данном случае мне лучше, каждый раз как это значение будет нужно, делать запрос к БД?

Аватар пользователя Ne_L Ne_L 7 января 2009 в 21:24

ну так а если я вывожу с помощью Views таблицу где в каждой ячейке есть поле которое высчитывается с помощью строки из БД - и этих ячеек м.б. довольно много - не будет ли это большой нагрузкой на сервак?

Аватар пользователя penexe penexe 7 января 2009 в 21:33

судя по коду вам надо сделать переключатель с одной валюты на другую?
текущее значение(коэффициент) храните в переменной, при выводе умножайте на него или что вам там надо.
переменную можно завести в конфиге либо задать в модуле
variable_get('my_value'); - получаете переменную
variable_set('my_value', $value); - задаете
никаких запросов в бд ненадо

Аватар пользователя Ne_L Ne_L 7 января 2009 в 22:26

почти - мне нужно прайсы поставщиков (у них есть и в EUR и в USD и в RUR) свести к RUR - в этом то вся и заморока.
«переменную можно завести в конфиге» - про это можно поподробнее? - никак не пойму почему так сложно задать переменную - казалось бы - прописал значение, там где нужно вызвал подставил и всё. А не получается почему то Smile

Аватар пользователя penexe penexe 7 января 2009 в 22:49
/**
 * Variable overrides:
 *
 * To override specific entries in the 'variable' table for this site,
 * set them here. You usually don't need to use this feature. This is
 * useful in a configuration file for a vhost or directory, rather than
 * the default settings.php. Any configuration setting from the 'variable'
 * table can be given a new value. Note that any values you provide in
 * these variable overrides will not be modifiable from the Drupal
 * administration interface.
 *
 * Remove the leading hash signs to enable.
 */

# $conf = array(
#   'site_name' => 'My Drupal site',
#   'theme_default' => 'minnelli',
#   'anonymous' => 'Visitor',

выдержка из settings.php
собственно
$conf = array('usd_value' => '12345'); - задали переменную
variable_get('usd_value'); - получили значение

Аватар пользователя Ne_L Ne_L 8 января 2009 в 4:50

Вообщем - проблемму свою решил - хоть это и не по данной теме, но напишу решение здесь
создал в Views поле Views_CustomField
и в нём записал следущий код:

$val = $data->valuta_value; // поле в котором у меня хранится тип валюты
$qer = db_result(
 db_query("SELECT value FROM curency WHERE name = '$val'"));
print round(($data->cena_value // тут хранится цена в указанном типе валюты
 *$qer),2); // собственно текущий курс

Такие дела - только вот вопрос - сильно ли это будет тормозить по сравнению с тем если бы я курсы валют брал из переменных (количество строк, в таблице, выводимых Views доходит до 50ти иногда)

Аватар пользователя penexe penexe 8 января 2009 в 5:00

Ne_L wrote:

Такие дела - только вот вопрос - сильно ли это будет тормозить по сравнению с тем если бы я курсы валют брал из переменных (количество строк, в таблице, выводимых Views доходит до 50ти иногда)

50 значений -> 50 лишних запросов к базе
против 0 запросов при объявлении переменной

Аватар пользователя neochief neochief 8 января 2009 в 14:03

функцию объявляете в своем модуле или на краняк в теме, дальше как обычно

function get_value($val) {
  static $res = array();
  if (!isset($res[$val])) {
    $res[$val] = db_result(db_query("SELECT value FROM curency WHERE name = '$val'"));
  }
  return $res[$val];
}

///....
///....

$val = $data->valuta_value; // поле в котором у меня хранится тип валюты
$qer = get_value($val);
print round(($data->cena_value // тут хранится цена в указанном типе валюты
 *$qer),2); // собственно текущий курс

Получаете один запрос в базу.