Files
BESCMS/dayrui/App/Block/Models/Block.php
T

129 lines
4.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php namespace Phpcmf\Model\Block;
// 模型类
class Block extends \Phpcmf\Model
{
// 格式化结果
public function getValueAll($v) {
foreach ($v as $i => $value) {
$v[$i] = $this->getValue($value);
}
return $v;
}
public function getValue($value) {
if (!$value['content']) {
$value['i'] = 0;
$value['value_0'] = '';
} else {
if (preg_match('/\{i-([0-9]+)\}:/U', $value['content'], $preg)) {
$value['i'] = intval($preg[1]);
$value['value_'.$value['i']] = str_replace((string)$preg[0], '', $value['content']);
if ($value['i'] == 4) {
$value['value_'.$value['i']] = dr_string2array($value['value_'.$value['i']]);
}
} else {
$value['i'] = 1;
$value['value_1'] = $value['content'];
}
}
return $value;
}
/**
* 确保当前站点的资料块表存在(替代 Install_site.sql
* 表名:{dbprefix}{siteid}_block
*/
protected function _ensure_site_table($siteid) {
$siteid = intval($siteid);
$table = $siteid.'_block';
$full = $this->dbprefix($table);
if ($this->is_table_exists($full)) {
return $table;
}
$rt = \Phpcmf\Service::M('table')->create_table(
$full,
[
'id' => 'smallint(5) unsigned NOT NULL AUTO_INCREMENT',
'name' => 'varchar(100) NOT NULL COMMENT \'名称\'',
'code' => 'varchar(100) NOT NULL COMMENT \'别名\'',
'hide' => 'tinyint(1) unsigned NOT NULL COMMENT \'隐藏\'',
'content' => 'text NOT NULL COMMENT \'内容\'',
],
[
'PRIMARY KEY (`id`)',
'KEY `code` (`code`)',
],
'资料块表'
);
if (!$rt['code']) {
log_message('error', 'Block 站点表创建失败['.$full.']'.($rt['msg'] ?? ''));
}
return $table;
}
// 缓存(按站点执行;缺表时自动建表)
public function cache($siteid = SITE_ID) {
$this->_ensure_site_table($siteid);
$table = \Phpcmf\Service::M()->dbprefix($siteid.'_block');
if (!\Phpcmf\Service::M()->is_field_exists($table, 'hide')) {
\Phpcmf\Service::M('table')->add_field($table, 'hide', 'int(5)', 'DEFAULT 0', '');
}
$data = $this->table($siteid.'_block')->getAll();
$cache = [];
if ($data) {
foreach ($data as $t) {
if ($t['hide']) {
continue;
}
$t = $this->getValue($t);
if (!$t['code']) {
// 填充默认code
$t['code'] = $t['id'];
$this->table($siteid.'_block')->update($t['id'], [
'code' => $t['id'],
]);
}
switch (intval($t['i'])) {
case 0:
// 文本内容
$value = $t['value_0'];
break;
case 1:
// 文本内容
$value = $t['value_1'];
break;
case 2:
// 丰富文本
$value = htmlspecialchars_decode($t['value_2']);
break;
case 3:
// 单文件
$value = $t['value_3'];
break;
case 4:
// 多文件
$value = dr_string2array($t['value_4']);
break;
}
$cache[$t['code']] = [
1 => $t['name'],
0 => $value
];
}
}
\Phpcmf\Service::L('cache')->set_file('block-'.$siteid, $cache);
return;
}
}