【问题标题】:Adding fields to apostrophe-richt-text将字段添加到撇号-richt-text
【发布时间】:2019-09-13 03:53:05
【问题描述】:

我想让apostrophe-rich-text-widgets 可配置,允许设置文本列的数量。 (然后这个数字将转换为一个 CSS 类,这是微不足道的部分。)

如何正确addFields 到富文本小部件?下面将显示编辑富文本按钮,但是当我点击它时,什么也没有发生。

// my-app/lib/modules/apostrophe-rich-text-widgets/index.js
const _ = require('lodash');

module.exports = {
    beforeConstruct: function(self,options) {

        //options.contextualOnly = !_.isUndefined(options.contextualOnly) ? options.contextualOnly : false;
        options.contextualOnly = false;

        options.addFields = [
            {
                name: 'nr_columns',
                type: 'integer',
                min: 1,
                max: 3,
                label: 'Number of Columns'
            }
        ].concat(options.addFields || []);
    }
};

更新

所以我实现了一个包装器小部件,它允许我将列数配置为整数,并将apostrophe-rich-text 小部件添加为单例。

// lib/modules/my-wrapper/index.js
module.exports = {                                                
    extend: 'apostrophe-widgets',                                 
    label: 'Multi-column Text',                                   
    skipInitialModal: true,                                     
    addFields: [                                                  
        {                                                         
            name: 'nr_columns',                                   
            label: 'Nr. of Columns',                              
            type: 'integer',                                      
            required: true,                                       
            min: 1,                                               
            max: 3                                                
        },                                                        
        {                                                         
            name: 'text',                                         
            label: 'Text',                                        
            type: 'singleton',                                    
            widgetType: 'apostrophe-rich-text',                   
            contextual: true                                      
        }                                                         
    ]                                                             
};

当我将包装小部件添加到页面时,看不到富文本编辑器。 views/widget.html 需要什么才能完成这项工作?

更新 2

这是我的views/widget.html,但我完全不确定里面应该有什么。 (编辑:将下面的 widget.content 替换为 data.widget.content - 仍然是同样的问题。

{% set n = data.widget.nr_columns %}

<div data-rich-text class="apos-rich-text text-row {% if n == 2 %}two-column{% endif %}">
    {{ data.widget.content }}
</div>

更新 3

我的views/widget.html

<div class="text-row {% if n == 2 %}two-column{% elif n == 3%}three-column{% endif %}">
    {{ apos.singleton(data.widget, 'text', 'apostrophe-rich-text', {toolbar:['Bold','Italic'],contextualOnly:true}) }}
</div>

我的index.js

module.exports = {
    extend: 'apostrophe-widgets',
    label: 'Multi-column Text',
    //skipInitialModal: true,
    addFields: [
        {
            name: 'nr_columns',
            label: 'Nr. of Columns',
            type: 'integer',
            required: true,
            min: 1,
            max: 3
        },
        {
            name: 'text',
            contextualOnly: true,
            type: 'singleton',
            widgetType: 'apostrophe-rich-text'
        }
    ]
};

将小部件添加到页面后我看到的内容:

【问题讨论】:

  • 富文本小部件在小部件扩展的正常边界之外运行,更难以覆盖。相反,我将使用富文本单例和列计数整数作为其架构制作一个包装器小部件。如果您希望它在放置时表现得像普通的富文本小部件,您可以制作小部件 skipInitialModal:true 和 RT 单例 contextual:true。然后像你一样实现列。不确定这是一个令人满意的答案。
  • 谢谢,我试试看!
  • 请发布您的包装小部件views/widget.html
  • 完成@StuartRomanek
  • 看来,在添加单例时,apostrophe-rich-text 小部件实际上并未被添加;相反,会出现一个添加富文本区域的按钮。这可能是它为空的原因。如何告诉撇号添加 apostrophe-rich-text 小部件,而不是添加按钮?

标签: apostrophe-cms


【解决方案1】:

为了获得与 Apostrophe 的普通 apostrophe-rich-text 小部件相同的效果,您实际上需要将该单例添加到小部件的模板中,例如

<div class="some-wrapper">
   {{ apos.singleton(data.widget, 'RICH_TEXT_WIDGET_SCHEMA_NAME', 'apostrophe-rich-text', {...RICHTEXT_OPTIONS_HERE}) }}
</div>

【讨论】:

  • 所以我从index.js 中删除了singleton,我的views/widget.html 包含{{ apos.singleton(data.widget, 'multi-column-text', 'apostrophe-rich-text', {toolbar:['Bold','Italic'],contextual:true}) }} 我现在可以看到多个列,但是仍然有一个按钮说添加富文本 而不是实际的小部件。我错过了什么?
  • 不完全确定您的意思。添加富文本是富文本小部件的空状态。您需要将单例字段保留在小部件的 index.js 中,因为 Apostrophe 将需要它进行各种清理操作。小部件选项中的contextual: true 将不会被识别,这只是模态编辑器的标志。您的内容现在保存了吗?
  • 很抱歉给您带来了困惑。我用views/widget.htmlindex.js 和屏幕截图再次更新了原始问题。
  • 这看起来是正确的。仍然对您期望发生的事情感到困惑。
  • 啊,你想自动初始化富文本编辑器,就像你把它放在页面上时一个独立的富文本小部件一样。我认为简短的回答是没有开箱即用的方法来做到这一点,但我可以想象它是撇号核心和富文本小部件选项的小 PR。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多