使用 PHP 以编程方式将 CSS 注入 Joomla 内容编辑器 (JCE)?

Posted

技术标签:

【中文标题】使用 PHP 以编程方式将 CSS 注入 Joomla 内容编辑器 (JCE)?【英文标题】:Inject CSS into Joomla Content Editor (JCE) programmatically using PHP? 【发布时间】:2012-10-23 11:23:10 【问题描述】:

我只想在 JCE 编辑器 iframe 中嵌入特定页面的样式表,最好使用 php。现在,JCE 管理界面允许您为在管理控制面板中加载 JCE 的每个实例全局设置样式表,并按单个用户配置文件进行设置。但是,我正在创建自定义组件来加载编辑器以进行显示,如下所示:

<?php
$editor = JFactory::getEditor();  // JCE set by default
echo $editor->display();

我希望能够根据组件的不同部分加载不同的样式表。据我所知,这不是开箱即用的,所以我想看看是否有一些 API 方法可以帮助我实现这一目标。

类似:

<?php
$editor = JFactory::getEditor();  // JCE set by default

// calculate whether additional styles may be needed...
if (true === $needs_more_stylesheets_bool) 
   // Would be nice to do something like
   $editor->addStylesheet('specific_styles.css');
   // Or
   $editor->addInlineStyle('bodybackground:green');
   // Or
   $editor->removeStylesheet('general_styles.css'); 

   // Or... with adding/editing user profiles... 
   $editor->loadUserProfile('user_2_with_different_stylesheets');

【问题讨论】:

您能详细解释一下这个问题吗? 另外,如果我错了,请纠正我,但 JCE 似乎没有使用 $params 变量。 更新问题。我不确定 $params 数组接受什么,或者即使 JCE 可能会使用它们。 我对此进行了调查,但找不到任何接近直接的方法来完成此操作。也就是说,如果 JCE 配置文件不够用(使用配置文件,您可以使用不同的 CSS 集)。 JCE 配置文件确实是不够的,除非我可以将配置文件作为参数传递给某个方法。我正在为我的自定义组件使用编辑器,所以如果有一些东西只适用于文章,那就不够了。 【参考方案1】:

我会建议你如何添加一些内联样式,你可以继续使用相同的方法 编辑器类位于 root/libraries/joomla/html/editor.php

绕线你会发现显示功能

public function display($name, $html, $width, $height, $col, $row, $buttons = true, $id = null, $asset = null, $author = null, $params = array())
    
        ...
        ...
$width = str_replace(';', '', $width);
        $height = str_replace(';', '', $height);

        // Initialise variables.
        $return = null;

        $args['name'] = $name;
        $args['content'] = $html;
        $args['width'] = $width;
        $args['height'] = $height;
        $args['col'] = $col;
        $args['row'] = $row;
        $args['buttons'] = $buttons;
        $args['id'] = $id ? $id : $name;
        $args['event'] = 'onDisplay';
                ...

我会尝试传递我的内联样式

public function display($name, $html, $width, $height, $col, $row, $buttons = true, $id = null, $asset = null, $author = null, $params = array(),$inlinestyles)
...
$args['inlinestyles'] = $inlinestyles;
...

现在我们必须编辑位于 root/plugins/editors/jce/jce.php 中的 jce.php 文件

正如您在 paramaters 事件中看到的,我们将更改 onDisplay 事件

108号线附近

public function onDisplay($name, $content, $width, $height, $col, $row, $buttons = true, $id = null, $asset = null, $author = null) 
... 
return $editor;
    

现在我们将改变这个函数并使用 JDocument 来解析我们的样式

public function onDisplay($name, $content, $width, $height, $col, $row, $buttons = true, $id = null, $asset = null, $author = null,$inlines) 
//blah blah some code
//here comes the fun part
if($inlines)
$document =& JFactory::getDocument();
$document->addStyleDeclaration($inlines);


 //end of ondisplay

现在在您的组件中,您必须调用您的编辑器,因为它记录在 Joomla 的文档中

$inlines= 'BODY '
        . 'background: #00ff00;'
        . 'color: rgb(0,0,255);'
        . ''; 
$editor = JFactory::getEditor();
echo $editor->display("jobdesc", ""/*$itemData['body']*/, "400", "100", "150", "10", 1, null, null, null, array('mode' => 'advanced'),$inlines);

http://docs.joomla.org/JFactory/getEditor

【讨论】:

以上是关于使用 PHP 以编程方式将 CSS 注入 Joomla 内容编辑器 (JCE)?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将搜索查询注入 Select2 v4?

以编程方式将模态注入 HTML 不起作用

如何以编程方式将 Java CDI 托管 bean 注入(静态)方法中的局部变量

CVE-2018-8045 Joomla内核SQL注入漏洞

CVE-2018-8045 Joomla内核SQL注入漏洞

如何将 Vuetify 注入我的自定义 vue 插件