Вся таблица переменных подгружается при загрузке страницы в глобальную переменную $conf. Исходя из этого, переменные стоит использовать только для того, дл чего они предназначены — для хранения настроек. Для данных используйте свои таблицы.
Ок, спасибо.
А как мне при загрузке страницы из своей таблицы в БД сделать переменные?
В каком месте прописать их значения (они будут использоваться при создании таблицы модулем Views)
Вы пытатесь делать все совершенно не так как нужно. Свои данные стоит подгружать перед тем, как захотите их вывести. Не нужно пихать их в таблицу переменных, что вы делаете при помощи variable_set().
Кроме того, сам способ использованя функции неправильный, нужно так:
так в том то и дело (простите если не понял подсказки конечно) что мне нужно использовать переменную не только в какой то конкретной функции - мне нужно чтобы она была доступна в любом месте, в пределах сайта.
или в данном случае мне лучше, каждый раз как это значение будет нужно, делать запрос к БД?
ну так а если я вывожу с помощью Views таблицу где в каждой ячейке есть поле которое высчитывается с помощью строки из БД - и этих ячеек м.б. довольно много - не будет ли это большой нагрузкой на сервак?
судя по коду вам надо сделать переключатель с одной валюты на другую?
текущее значение(коэффициент) храните в переменной, при выводе умножайте на него или что вам там надо.
переменную можно завести в конфиге либо задать в модуле
variable_get('my_value'); - получаете переменную
variable_set('my_value', $value); - задаете
никаких запросов в бд ненадо
почти - мне нужно прайсы поставщиков (у них есть и в EUR и в USD и в RUR) свести к RUR - в этом то вся и заморока.
«переменную можно завести в конфиге» - про это можно поподробнее? - никак не пойму почему так сложно задать переменную - казалось бы - прописал значение, там где нужно вызвал подставил и всё. А не получается почему то
/**
* 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'); - получили значение
Вообщем - проблемму свою решил - хоть это и не по данной теме, но напишу решение здесь
создал в Views поле Views_CustomField
и в нём записал следущий код:
$val = $data->valuta_value; // поле в котором у меня хранится тип валюты $qer = db_result( db_query("SELECT value FROM curency WHERE name = '$val'")); printround(($data->cena_value// тут хранится цена в указанном типе валюты *$qer),2); // собственно текущий курс
Такие дела - только вот вопрос - сильно ли это будет тормозить по сравнению с тем если бы я курсы валют брал из переменных (количество строк, в таблице, выводимых Views доходит до 50ти иногда)
Такие дела - только вот вопрос - сильно ли это будет тормозить по сравнению с тем если бы я курсы валют брал из переменных (количество строк, в таблице, выводимых Views доходит до 50ти иногда)
50 значений -> 50 лишних запросов к базе
против 0 запросов при объявлении переменной
функцию объявляете в своем модуле или на краняк в теме, дальше как обычно
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); printround(($data->cena_value// тут хранится цена в указанном типе валюты *$qer),2); // собственно текущий курс
Комментарии
обязательно
http://api.drupal.org/api/function/variable_set/6
http://api.drupal.org/api/function/variable_get/6
как там видите, кеш присутствует.
(опередили сверху но все же)
Все предельно просто: variable_get(), variable_set().
Вся таблица переменных подгружается при загрузке страницы в глобальную переменную $conf. Исходя из этого, переменные стоит использовать только для того, дл чего они предназначены — для хранения настроек. Для данных используйте свои таблицы.
2neochief, $conf?
http://api.drupal.org/api/global/conf/6
Да, $conf. Посмотрите в код функций, они из нее все берут. Вероятно описалово неправильное.
Ок, спасибо.
А как мне при загрузке страницы из своей таблицы в БД сделать переменные?
В каком месте прописать их значения (они будут использоваться при создании таблицы модулем Views)
Что значит как?
это то понятно
в 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);
ни в одном из случаев значение переменной не выодится.
Ох, как все запущено
Вы пытатесь делать все совершенно не так как нужно. Свои данные стоит подгружать перед тем, как захотите их вывести. Не нужно пихать их в таблицу переменных, что вы делаете при помощи variable_set().
Кроме того, сам способ использованя функции неправильный, нужно так:
...
...
$value = variable_get('my_value');
Разберитесь с этим кодом, он покажет что и как необходимо делать. Или откройте первый попавшийся небольшой модуль и посмотрите в его код.
так в том то и дело (простите если не понял подсказки конечно) что мне нужно использовать переменную не только в какой то конкретной функции - мне нужно чтобы она была доступна в любом месте, в пределах сайта.
или в данном случае мне лучше, каждый раз как это значение будет нужно, делать запрос к БД?
да, это же не виндовое приложение
ну так а если я вывожу с помощью Views таблицу где в каждой ячейке есть поле которое высчитывается с помощью строки из БД - и этих ячеек м.б. довольно много - не будет ли это большой нагрузкой на сервак?
судя по коду вам надо сделать переключатель с одной валюты на другую?
текущее значение(коэффициент) храните в переменной, при выводе умножайте на него или что вам там надо.
переменную можно завести в конфиге либо задать в модуле
variable_get('my_value'); - получаете переменную
variable_set('my_value', $value); - задаете
никаких запросов в бд ненадо
почти - мне нужно прайсы поставщиков (у них есть и в EUR и в USD и в RUR) свести к RUR - в этом то вся и заморока.
«переменную можно завести в конфиге» - про это можно поподробнее? - никак не пойму почему так сложно задать переменную - казалось бы - прописал значение, там где нужно вызвал подставил и всё. А не получается почему то
* 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'); - получили значение
Вообщем - проблемму свою решил - хоть это и не по данной теме, но напишу решение здесь
создал в Views поле Views_CustomField
и в нём записал следущий код:
$qer = db_result(
db_query("SELECT value FROM curency WHERE name = '$val'"));
print round(($data->cena_value // тут хранится цена в указанном типе валюты
*$qer),2); // собственно текущий курс
Такие дела - только вот вопрос - сильно ли это будет тормозить по сравнению с тем если бы я курсы валют брал из переменных (количество строк, в таблице, выводимых Views доходит до 50ти иногда)
50 значений -> 50 лишних запросов к базе
против 0 запросов при объявлении переменной
функцию объявляете в своем модуле или на краняк в теме, дальше как обычно
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); // собственно текущий курс
Получаете один запрос в базу.
Спасибоооо!!!