本教程需要4.6.0及其以上版本使用(内部教程暂不公开使用)
Myfield.php是用于插件自定义字段的配置文件,例如内容系统中自定义模块字段、自定义栏目字段等等功能。
<?php
// 自定义字段的支持函数
// 初始化信息
function myfield_init_xxxxxxxxx($relatedname, $relatedid) {
$data = \Phpcmf\Service::M()->init(['table' => '表名'])->get($relatedid);
if (!$data) {
return dr_return_data(0, dr_lang('相关数据不存在(%s)', $relatedid));
}
return dr_return_data(1, 'ok', [
'data' => $data,
'name' => '某某字段',
'backurl' => '', // 返回uri地址
]);
}
// 获取表名称
function myfield_tablename_xxxxxxxxx($field, $siteid, $relatedname, $relatedid) {
$data = \Phpcmf\Service::M()->table('表名')->get($relatedid);
if (!$data) {
return;
}
return $field['ismain'] ? '自定义表前缀_'.$data['table'] : '自定义表前缀_'.$data['table'].'_data_{tableid}';
}
// 执行sql
function myfield_sql_xxxxxxxxx($sql, $ismain) {
$table = \Phpcmf\Service::M()->dbprefix('自定义表前缀_'.\Phpcmf\Service::M('field')->data['table']); // 主表名称
if (!\Phpcmf\Service::M()->db->tableExists($table)) {
return;
}
if ($ismain) {
// 更新主表 格式: 站点id_名称
\Phpcmf\Service::M()->db->simpleQuery(str_replace('{tablename}', $table, $sql));
\Phpcmf\Service::M('field')->_table_field[] = $table;
} else {
for ($i = 0; $i < 200; $i ++) {
if (!\Phpcmf\Service::M()->db->query("SHOW TABLES LIKE '".$table.'_data_'.$i."'")->getRowArray()) {
break;
}
\Phpcmf\Service::M()->db->simpleQuery(str_replace('{tablename}', $table.'_data_'.$i, $sql)); //执行更新语句
\Phpcmf\Service::M('field')->_table_field[] = $table.'_data_'.$i;
}
}
}
// 字段是否存在
function myfield_field_xxxxxxxxx($name) {
// 主表
$table = \Phpcmf\Service::M()->dbprefix('自定义表前缀_'.\Phpcmf\Service::M('field')->data['table']);
$rt = \Phpcmf\Service::M('field')->_field_exitsts('id', $name, $table, SITE_ID);
if ($rt) {
return 1;
}
// 附表
$rt = \Phpcmf\Service::M('field')->_field_exitsts('id', $name, $table.'_data_0', SITE_ID);
if ($rt) {
return 1;
}
return 0;
}
// 更新缓存
function myfield_cache_xxxxxxxxx() {
}
自定义字段地址字符串:
dr_url("field/index", ["relatedname" => "xxxxxxxxx", "relatedid"=>9999某表数据的id号])