Joomla! - Заредете оформлението на приставката editor-xtd от определен файл в манипулатора на iframe на бутона

Работя върху 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}}";

... но пълната генерирана връзка в admin изглежда като http://my.local.host/mywebsite/administrator/plugins/editor-xtd/link-etc.. и не работи. Също така се опитах да включа JURI::base в моята $link, но администраторският път все още е зареден.

Нов съм в разработването на плъгини с Joomla! и търсих много, но не намерих решение.

** Опитах също връзка като тази index.php?folder=plugins.editors-xtd.myplugin&file=myplugin.layout.php&name=$name, но пак нищо. Има ли тренировка за това или ще трябва да създам и използвам функция на javascript, за да стартирам при натискане на бутон?


person tbutcaru    schedule 25.03.2014    source източник


Отговори (3)


Решение

Променете променливата на връзката по този начин (ако приложението е администратор):

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

... и опции за бутон за изтриване (това означава, че съдържанието на файла ще бъде заредено чрез ajax вътре в modal)

Нещо повече, в 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...
person tbutcaru    schedule 08.12.2018
comment
Не виждам никаква полза от дефинирането на IS_AJAX. Просто напишете тези проверки в if израз, без да създавате константа и умрете, когато е необходимо. - person mickmackusa; 08.12.2018

За съжаление тук има малко грешка, тъй като процесът на проверка на JED изисква ВСИЧКИ php файлове да започват с defined('_JEXEC') or die; на първия ред от кода, така че ако искате да го споделите на extensions.joomla.org, тогава сте в затруднение...

person RogerCO    schedule 11.12.2018

Обратно в OP можете да откриете дали сте в Admin или Site, преди да генерирате връзката:

    $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'; трябва да е името на иконата от набора icomoon на Joomla - можете да ги видите тук https://ma.tvtmarine.com/en/blog/112-joomla-icomoon-icons-directory Името трябва да е името на иконата без битът .icon- напр.: $button->name = 'warning-2';

кодовият блок изглежда не работи правилно...съжалявам за форматирането

person RogerCO    schedule 11.12.2018