Source for file DBWorker.class.php
Documentation is available at DBWorker.class.php
* @copyright Energine 2006
//require_once('core/framework/SystemConfig.class.php');
//require_once('core/framework/QAL.class.php');
* Предоставляет производным классам ссылку на объект для работы с БД.
* @var QAL единый для всех экземпляров класса объект QAL
protected static $dbhInstance;
* @var QAL ссылка на self::$dbhInstance (для производных классов)
* (получается за ними по отдельности очень часто нужно обращаться)
private static $translations = null;
if (!isset (self::$dbhInstance)) {
self::$dbhInstance = new QAL(
PDO::ATTR_PERSISTENT => false,
PDO::ATTR_EMULATE_PREPARES => true,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
$this->dbh = self::$dbhInstance;
* Возвращает перевод текстовой константы из таблицы переводов для
* указанного языка. Если язык явно не указан - используется текущий язык.
* @param string $const текстовая константа
* @param int $langId язык для перевода
public static function _translate($const, $langId = null) {
$const = strtoupper($const);
//если не закешированы - кешируем переводы для текущего языка
//действия по кешированию логичней было бы разместить в конструкторе,
//но на момент его вызова еще не известен дефолтный язык
$res = self::$dbhInstance->selectRequest(
'SELECT UPPER(ltag_name) AS const, trans.ltag_value_rtf AS translation FROM share_lang_tags ltag '.
'LEFT JOIN share_lang_tags_translation trans ON trans.ltag_id = ltag.ltag_id '.
'WHERE lang_id = '. $currentLangId
self::$translations[$currentLangId][$row['const']] = $row['translation'];
//вот что должно происходить если в базе нет констант текущего языка?
//устанавливаем дефолтное возвращаемое значение равным значению константы перевода
//Тут столько хитрых проверок не просто так - а чтобы минимизировать количество обращений к БД
//Если язык - не указан, используем текущий, а информация о константах на нем у нас закеширована
$langId = $currentLangId;
//эта константа есть в переводах для текущего языка?
if(isset (self::$translations[$currentLangId][$const])){
//тогда возвращаем ее значение
$result = self::$translations[$currentLangId][$const];
//если не было - теперь будет
//а значение возвращается дефолтное
self::$translations[$currentLangId][$const] = $const;
//может все таки есть инфа в кеше?
elseif(isset (self::$translations[$langId][$const])){
$result = self::$translations[$langId][$const];
//лезем за значением в базу
$res = self::$dbhInstance->selectRequest(
'SELECT trans.ltag_value_rtf AS result FROM share_lang_tags ltag '.
'LEFT JOIN share_lang_tags_translation trans ON trans.ltag_id = ltag.ltag_id '.
'WHERE ltag.ltag_name = '. self::$dbhInstance->quote($result). ' AND lang_id = '. intval($langId)
//если нашли - вернем его
//а если не нашли - будет возвращаться дефолтное значение
//нашли - не нашли все равно в кеш записываем
self::$translations[$langId][$const] = $result;
* Возвращает дату в виде строки прописью
$result = (int) $day. ' '. self::_translate('TXT_MONTH_'.(int) $month). ' '. $year;
* Нестатический метод-обёртка над DBWorker::_translate -
* для удобства использования внутри производных классов.
* @param string $const текстовая константа
* @param int $langId язык для перевода
* @see DBWorker::_translate()
public function translate($const, $langID = null) {
return self::_translate($const, $langID);
* Обертка над DBWorker::_dateToString
* @see DBWorker::_dateToString
list ($year, $month, $day) = sscanf($date, $format);
return self::_dateToString($year, $month, $day);
|