internetrix / silverstripe-fluent-extra-table
扩展的silverstripe fluent模块。地区数据存储在独立的表中。
1.1.0
2017-09-18 04:39 UTC
Requires
- silverstripe/cms: ~3.3
- silverstripe/framework: ~3.3
- tractorcow/silverstripe-fluent: ~3.7
This package is not auto-updated.
Last update: 2024-09-28 19:25:59 UTC
README
本模块扩展自 Fluent。
在额外表中存储地区内容
Fluent模块很棒且易于使用。然而,所有额外的地区列都存储在相同的数据对象表中。如果在一个表中定义了过多的列,可能会引起MySQL问题。例如,行大小过大 错误。
本模块扩展了Fluent功能,并且地区数据以地区名称后缀的形式存储在独立的表中。
安装
composer require internetrix/silverstripe-fluent-extra-table:1.0.0
可翻译的版本化数据对象
将以下代码放入用于翻译的版本化数据对象中。
Fluent:
VersionedFluentDataObjects:
- <DataObject Name>
Versioned当前问题
需要在Page.php中实现以下allVersions()函数,以避免在点击页面历史记录时出错。
public function allVersions($filter = "", $sort = "", $limit = "", $join = "", $having = "") { // Make sure the table names are not postfixed (e.g. _Live) $oldMode = Versioned::get_reading_mode(); Versioned::reading_stage('Stage'); $list = DataObject::get(get_class($this), $filter, $sort, $join, $limit); if($having) $having = $list->having($having); $query = $list->dataQuery()->query(); foreach($query->getFrom() as $table => $tableJoin) { if(is_string($tableJoin) && $tableJoin[0] == '"') { $baseTable = str_replace('"','',$tableJoin); } elseif(is_string($tableJoin) && substr($tableJoin,0,5) != 'INNER') { $query->setFrom(array( $table => "LEFT JOIN \"$table\" ON \"$table\".\"RecordID\"=\"{$baseTable}_versions\".\"RecordID\"" . " AND \"$table\".\"Version\" = \"{$baseTable}_versions\".\"Version\"" )); } // fix locale table names $locale = Fluent::current_locale(); $default = Fluent::default_locale(); if(strpos($table, $locale) !== false){ $table = str_replace('_' . $locale,'',$table); $query->renameTable($table, $table . '_versions' . '_' . $locale); } else if (strpos($table, $default) !== false){ $table = str_replace('_' . $default,'',$table); $query->renameTable($table, $table . '_versions' . '_' . $default); } else { $query->renameTable($table, $table . '_versions'); } } // Add all <basetable>_versions columns foreach(Config::inst()->get('Versioned', 'db_for_versions_table') as $name => $type) { $query->selectField(sprintf('"%s_versions"."%s"', $baseTable, $name), $name); } $query->addWhere(array( "\"{$baseTable}_versions\".\"RecordID\" = ?" => $this->ID )); $query->setOrderBy(($sort) ? $sort : "\"{$baseTable}_versions\".\"LastEdited\" DESC, \"{$baseTable}_versions\".\"Version\" DESC"); $records = $query->execute(); $versions = new ArrayList(); foreach($records as $record) { $versions->push(new Versioned_Version($record)); } Versioned::set_reading_mode($oldMode); return $versions; }