fiedsch/contao-components

此包已被弃用且不再维护。作者建议使用 fiedsch/contao-jsonwidget 包。

Contao开源内容管理系统(CMS)的附加组件

安装: 13

依赖: 1

建议者: 0

安全: 0

星星: 0

关注者: 1

分支: 0

开放问题: 0

类型:contao-module

v0.6.4 2018-01-06 09:15 UTC

This package is auto-updated.

Last update: 2020-01-18 10:03:08 UTC


README

已弃用!请使用 fiedsch/contao-jsonwidget 代替。

小部件

JSON小部件

可以在DCA文件中使用 jsonWidget 来创建一个包含JSON字符串的文本字段。保存时将检查该字符串是否为有效的JSON。小部件使用 JSON_PRETTY_PRINT 显示JSON字符串,以便于阅读者进行检查。

示例:扩展成员

$GLOBALS['TL_DCA']['tl_member']['fields']['json_data'] = [
   'inputType' => 'jsonWidget',
   'label'     => &$GLOBALS['TL_LANG']['tl_member']['json_data'],
   'eval'      => ['tl_style'=>'long', 'decodeEntities'=>true, 'allowHtml'=>true ], 
   'sql'       => "blob NULL",
 ];
 
 // Add json_data to $GLOBALS['TL_DCA']['tl_member']['palettes']['default'] 
 // where ever you like

eval 中的其他有效选项与 textarea 相同(因为 WidgetJSON 扩展了 TextArea),只是设置 rte 将被忽略,因为提供的编辑器在此处没有意义。

如何使用?

如上例扩展 tl_member。然后创建一个扩展Contao的 MemberModelExtendedMemberModel。在魔法方法 __set()_get 中,您可以拦截存储在 json_data 中的“字段”。Fiedsch\JsonGetterSetterTrait 会处理这一点。

// models/ExtendedMemberModel.php
namespace Contao;

class ExtendedMemberModel extends \MemberModel
{
    // let __set() and __get take care of the JSON data
    use \Fiedsch\JsonGetterSetterTrait;

  /**
    * The column name we selected for the `jsonWidget` in the example above
    * @var string
    */
    protected static $strJsonColumn = 'json_data';

}
// config/config.php
$GLOBALS['TL_MODELS']['tl_member'] = 'Contao\ExtendedMemberModel';
// config/autoload.php
// ...
ClassLoader::addClasses(
    [
        // ...
        'Contao\ExtendedMemberModel' => 'system/modules/your_extension/models/ExtendedMemberModel.php',
        // ...
    ]
);
// ...

最后...

$member = \ExtendedMemberModel::findById(42);

// access fields columns created by contao's default DCA
printf("read member %s %s\n", $member->firstname, $member->lastname);

// access a field stored in our JSON data column
printf("transparently accessing a field from the JSON data ... '%s'\n", $member->whatever);

// set values and store in database
$member->a_key_for_a_scalar_value = "fourtytwo";
$member->key_for_an_array = ['an','array','containing','some','strings'];
$member->save();

辅助类

读取YAML配置文件(主要实验性)

use Fiedsch\YamlConfigHelper;

$defaults = [
   'messages' => [
                   'de' => 'Guten Tag',
                   'fr' => 'Bonjour',
                   'en' => 'Hello',
                  ]
           ];
$config = new YamlConfigHelper('files/config/config.yaml', $defaults);

如果 files/config/config.yml 不存在,它将使用(可选参数)$defaults 中指定的数据创建。

messages:
    de: 'Guten Tag'
    fr: 'Bonjour'
    en: 'Hello'

使用如下 YamlConfigHelper 实例 $config

$config->getEntry('data.messages.de'); // 'Guten Tag'
$config->getEntry('data.messages.es'); // null

假设如预期的那样 files/config/config.yaml 存在并包含

   messages:
       de: 'Guten Morgen'
       fr: 'Bonjour'
       en: 'Good Morning'

您将得到

$config->getEntry('data.messages.de'); // 'Guten Morgen'
$config->getEntry('data.messages.es'); // null

$defaults 中的数据将被忽略。不会合并从配置文件读取的内容和指定的 $defaults

有关使用Symfony的 ExpressionLanguage 的详细信息,请参阅 https://symfony.com.cn/doc/current/components/expression_language.html

指定默认值

如上所示的配置数据

$config->getEntry('data.messages.es'); // null
$config->getEntry('data.messages.es', "¡buenos días!"); // "¡buenos días!"

数据类型

如上所示的配置文件

$config->getEntry('data.messages');
/*
object(stdClass)#233 (3) {
  ["de"]=>
  string(12) "Guten Morgen"
  ["fr"]=>
  string(7) "Bonjour"
  ["en"]=>
  string(12) "Good Morning"
}
*/

返回一个 stdClass 实例。如果您需要将数据作为 array 使用,必须将其类型转换为 array

(array)$config->getEntry('data.messages');
/*
array(3) {
  ["de"]=>
  string(12) "Guten Morgen"
  ["fr"]=>
  string(7) "Bonjour"
  ["en"]=>
  string(12) "Good Morning"
}
*/

请注意

使用

$config = new YamlConfigHelper('files/sompe/path/to/a/file.yaml');

请注意,除非路径中的某个文件夹(例如 files/sompe/path/to/a/)被 .htaccess 文件(Contao后端中的锁形图标)保护,否则 file.yaml 是公开可访问的(在Contao 3中)。

如果您想使文件可由Contao后端用户编辑

  • 请将其放置在(位于)files/(的一个子文件夹下)
  • 将文件扩展名设置为 .yaml,这样Contao的语法高亮功能就会被触发(使用 .yml 扩展名则不会发生这种情况)
  • yaml 添加到 Contao 的“可编辑文件类型”列表中(在系统设置中找到)