meraproject/module/core/lang/structure/LangVariable.php

188 lines
5.9 KiB
PHP
Raw Normal View History

<?
namespace core\lang\structure;
use core\cache\credis;
use \core\db\structure\Column as C;
use \core\db\structure\eColumnType;
new LangVariable();
class LangVariable extends \ModuleTable {
// Название таблицы
static $table_name = 'langVariable';
// Ссылка на самого себя
static $self;
// Переменные столбцов
static $ID = 'id';
static $TEXT_ID = 'textId';
static $NAME = 'name';
static $base = null;
public static function installUniques() {
\DB::addUnique(self::$table_name,self::$table_name.'_unique',[self::$TEXT_ID]);
}
static function init(){
//echo 'init';
/*
$path = dirname(__FILE__).'/'.\Config::$LANG_ID.'.txt';
echo $path;
$start = microtime(true);
$f = fopen($path,'r');
$s = fgets($f);
fclose($f);
self::$base = json_decode($s,true);
echo '<br><b> Прочитать из файла<Br> '.(microtime(true)-$start).'</b><br>';
//Redis::init();
credis::init();
$start = microtime(true);
$id = credis::get('id');
echo '<br><b>Прочитать из Redis одного значения <Br> '.(microtime(true)-$start).'</b><br>';
$start = microtime(true);
$id = credis::get('id');
echo '<br><b>Прочитать из Redis одного значения <Br> '.(microtime(true)-$start).'</b><br>';
$start = microtime(true);
$id = credis::get('id');
echo '<br><b>Прочитать из Redis одного значения <Br> '.(microtime(true)-$start).'</b><br>';
//*
$start = microtime(true);
$id = credis::agetone('lang','sovaMember_TH_ID');
echo '<pre>';
echo var_dump($id);
echo '</pre>';
echo '<br><b>Прочитать из Redis одного значения <Br> '.(microtime(true)-$start).'</b><br>';
/**/
//$start = microtime(true);
//self::$base = credis::aget('lang');
//echo '<br><b>Прочитать из Redis<Br> '.(microtime(true)-$start).'</b><br>';
//$start = microtime(true);
/*
echo '<br><b> Прочитать из базы<Br> '.(microtime(true)-$start).'</b><br>';
$start = microtime(true);
$f = fopen($path,'w+');
$b = [];
foreach (self::$base as $k=>$v){
$val= $v[LangValue::$VALUE];
$b[$k] = $v[LangValue::$VALUE];
//fwrite($f,$k."\n");
//fwrite($f,str_replace("\n","\\n",$v[LangValue::$VALUE])."\n");
//credis::set($k,$val);
}
fwrite($f,je(self::$base));
fclose($f);
echo '<br><b>Записать в файл<br>'.(microtime(true)-$start).'</b><br>';
$start = microtime(true);
//credis::aset('lang',$b);
echo '<br><b>Записать в редис<br>'.(microtime(true)-$start).'</b><br>';
/**/
//*
self::$base = self::collectToTextIDArray(new \Where(\Where::_operator(LangValue::$LANG,'=',\Config::$LANG_ID)),
[
\Query::LEFT_JOINS=>[ [ LangValue::$table_name,LangValue::$VARIABLE,self::$ID ] ]
]
);
}
static function getNow($text_id){
$r = self::select($q = [
\Query::TABLES => self::$table_name,
\Query::WHERE=>
new \Where(\Where::_and([
\Where::_operator(LangValue::$LANG,'=',\Config::$LANG_ID),
\Where::_operator(self::$TEXT_ID,'=',$text_id),
])),
\Query::LEFT_JOINS=>[ [ LangValue::$table_name,LangValue::$VARIABLE,self::$ID ] ],
\Query::COUNT => 1,
],false);
//echo new \Query($q);
$res = \DB::fetch($r);
return $res[LangValue::$VALUE];
}
static function getNeed(){
$r = self::select($q = [
\Query::TABLES => self::$table_name,
\Query::WHERE=>
new \Where(\Where::_and([
\Where::_operator(LangValue::$LANG,'=',\Config::$LANG_ID),
\Where::_in(self::$TEXT_ID,array_keys(self::$need)),
])),
\Query::LEFT_JOINS=>[ [ LangValue::$table_name,LangValue::$VARIABLE,self::$ID ] ]
],false);
//echo new \Query($q);
while($l = \DB::fetch($r)){
self::$needBase[self::wrapVar($l[self::$TEXT_ID])] = str_replace('"','\"', $l[LangValue::$VALUE]);
}
}
static $need = [];
static $needBase = [];
static function wrapVar($x){
return "%LANG%".$x."%LANG%";
}
static function get($x){
$wrap = self::wrapVar($x);
self::$need[$x] = $wrap;
return $wrap;
//if(!self::$base) { self::init(); }
//return self::$base[$x][LangValue::$VALUE];
}
static function add($values,$isUpdate = false){
$res = new \stdClass();
$res->e = 0;
$res->m = '';
$val = static::getByTextID($values[ static::$TEXT_ID ]);
if(!$val) {
$r = static::insert($values);
$res->id = $r->id;
} else {
$res->id = $val[static::$ID];
}
return $res;
}
static function columnInfo() : array {
return [
new C([
C::VAR_NAME =>&self::$ID,
C::TYPE =>eColumnType::INT,
C::AUTO_INCREMENT =>true,
C::PRIMARY =>true,
C::DEFAULT =>0,
]),
new C([
C::VAR_NAME =>&self::$TEXT_ID,
C::TYPE =>eColumnType::VARCHAR,
C::LENGTH =>63,
]),
new C([
C::VAR_NAME =>&self::$NAME,
C::TYPE =>eColumnType::VARCHAR,
C::LENGTH =>127,
]),
];
}
}