的Joomla! - 从按钮的iframe处理程序中的指定文件加载editor-xtd插件布局

时间:2014-03-25 19:49:15

标签: joomla joomla2.5 joomla-extensions joomla3.2

我正在做一个Joomla! 2.5 / 3.x editor-xtd按钮,我在按钮点击时从文件加载布局时遇到问题。

我尝试过这种方法:

$link = 'plugins/editors-xtd/myplugin/myplugin.layout.php?name='.$name;

$button = new JObject;
$button->modal = true;
$button->class = 'btn';
$button->link  = $link;
$button->text  = 'Insert something';
$button->name  = 'myplugin';
$button->options = "{handler: 'iframe', size: {x: 500, y: 300}}";

...但管理员中完整生成的链接看起来像http://my.local.host/mywebsite/administrator/plugins/editor-xtd/link-etc ..但它不起作用。我也试过在我的$ link中包含JURI :: base,但管理员路径仍然被加载。

我是Joomla插件开发人员的新手!我搜索了很多,但找不到解决方案。

**我也试过这样的链接 index.php?folder = plugins.editors-xtd.myplugin& file = myplugin.layout.php& name = $ name 但仍然没有。 有没有锻炼,或者我必须创建&使用javascript函数按钮点击运行?

3 个答案:

答案 0 :(得分:1)

解决方案

像这样修改链接变量(如果应用程序是管理员):

$link = '../plugins/editors-xtd/myplugin/myplugin.layout.php?name='.$name;

...和删除按钮选项(这意味着文件内容将通过模式内部的ajax加载)

此外,在myplugin.layout.php中,我们可以添加一些安全检查,然后可以导入Joomla!框架库和定义,以便我们可以使用Joomla!文件中的框架(例如语言加载之类的东西) 这是我实际的文件头:

<?php

// No direct access
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); 
if( ! IS_AJAX) die;

// Include J!Framework for later use
define( '_JEXEC', 1 );
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../..'));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE.DS.'includes'.DS.'defines.php');
require_once ( JPATH_BASE.DS.'includes'.DS.'framework.php');

//more magic goes here...

答案 1 :(得分:1)

不幸的是,这里有些陷阱,因为JED检查器过程要求所有php文件在代码的第一行都以defined('_JEXEC') or die;开头,因此如果要在extensions.joomla.org上共享它那你就受困了...

答案 2 :(得分:0)

返回OP之前,您可以在生成链接之前检测出您是处于管理员还是站点:

    $app = JFactory::getApplication();
    // ...
    if ($app->isAdmin()) {
        $root = '../';  // Joomla expects a relative path, leave site folder "administrator"
    } else {
        $root = '';
    }
    $button->link = $root.'/plugins/editors-xtd/myplugin/myplugin.layout.php?name='.$name;

此外,您可能已经知道$button->name = 'myplugin';必须是Joomla icomoon集中的图标名称-您可以在此处https://ma.tvtmarine.com/en/blog/112-joomla-icomoon-icons-directory看到它们 名称必须是不带.icon-位的图标名称,例如: $button->name = 'warning-2';

代码块似乎无法正常工作...很抱歉格式化