0 Пользователей и 1 Гость просматривают эту тему.
  • 27 Ответов
  • 1928 Просмотров
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Есть плагин группы editors-xtd, т.е. кнопка для редактора.
По нажатии на кнопку в редактор вставляется определенный текстовый контент.

Хочу, чтобы перед вставкой контента пользователю было выведено окошко, в котором он мог бы задать ряд параметров (инпуты, чек-боксы), на основании которых потом сформируется нужный контент для последующей вставки в редактор.

Смотрел в качестве примера кнопки из состава J, но там все завязано на ядро - я столько не пью ))
Смотрел в качестве примера кнопку PhocaDownload, но там идет ссылка на вьюху компонента, а у меня других расширений в комплекте с плагином использоваться не планируется.

Куда копать, что и где почитать/посмотреть примеры?
*

aspidy

  • Завсегдатай
  • 1008
  • 55 / 1
  • Миграция joomla 1.0-1.5-2.5
Выведите всплывашку модулем или плагином. Вставить можно редактор как с админ панели, так и с фронта.
Мелкий ремонт. skype poisk-plus
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Писать модуль или плагин для всплывашки в плагине? не, ну можно вообще сразу компонент забабахать...
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Знаю, что в плагине можно реализовать свою вьюху, посмотрел пример в pagenavigation, но не понял половину.
Код: php
			// Output.
if ($row->prev || $row->next)
{
// Get the path for the layout file
$path = JPluginHelper::getLayoutPath('content', 'pagenavigation');

// Render the pagenav
ob_start();
include $path;
$row->pagination = ob_get_clean();

$row->paginationposition = $this->params->get('position', 1);

// This will default to the 1.5 and 1.6-1.7 behavior.
$row->paginationrelative = $this->params->get('relative', 0);
}
Где именно отображение вьюхи идет? после } только return.
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
В общем, я в тупике, прошу помощи.
*

aspidy

  • Завсегдатай
  • 1008
  • 55 / 1
  • Миграция joomla 1.0-1.5-2.5
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Сейчас поделюсь своим гов нокодом )
Вызывается бутстаповское окошко модальное (будет работать естественно только в тройке, в двойке придется подключать сторонние скрипты для Lightbox нормального)
Можете также заменить на любое другое модальное окно подключив нужное вам!
Код: php
<?php
defined( '_JEXEC' ) or die;

/**
 * Класс для вставки кода видео
 * Class plgButtonVideo
 */
class plgButtonVideo extends JPlugin
{
/**
* Конструктор
* @param object $subject
* @param array $config
*/
public function __construct( $subject, $config )
{
parent::__construct( $subject, $config );
$this->loadLanguage();
}
/**
* Отображаем диалоговое окно
* @param $name string название редактора
* @return JObject
*/
public function onDisplay( $name )
{
$this->insertScripts( $name );
echo '
<div class="modal fade" id="inserVideo" style="display: none;">
  <div class="modal-header">
<button class="close" data-dismiss="modal">×</button>
<h3>Вставка видео</h3>
</div>
  <div class="modal-body">
  <div class="control-group">
  <label class="control-label" for="input01">Сервис</label>
  <div class="controls">
<select class="video-type">
<option value="youtube">YouTube</option>
<option value="rutube">RuTube</option>
</select>
</div>
</div>
<div class="control-group">
  <label class="control-label" for="input01">Ссылка на видео</label>
  <div class="controls"><input type="text" class="video-link" value="" /></div>
  </div>
  <br /><br /><br />
  </div>
  <div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Закрыть</a>
<a href="#" class="btn btn-primary btn-insert-video">Вставить</a>
  </div>
</div>
';
$button = new JObject;
$button->modal = false;
$button->class = 'btn';
$button->text = 'Вставить видео';
$button->name = 'picture';
$button->onclick = 'showModal(); return false;';
$button->link = '#';

return $button;

}
/**
* Вставка скриптов
* @param $name string название редактора
*/
private function insertScripts( $name )
{
$doc = JFactory::getDocument();
//функция showModal отображает всплывающее окно
$doc->addScriptDeclaration( 'function showModal(){ jQuery("#inserVideo").modal("toggle"); }; ' );
//Это вставка в редактор нужного текста (вставляется в методе jInsertEditorText("текст",  "имя редактора (переменная name)");
//И скрытие всплываюшего окна
$doc->addScriptDeclaration( '
jQuery(document).ready(function($){
$(".btn-insert-video").on("click", function(){
var type = $(".video-type").val();
var videoUrl = $(".video-link").val();
jInsertEditorText("{"+type+" "+videoUrl+"}",  "' . $name . '");
$("#inserVideo").modal("toggle");
});
});
' );
}
}
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
В общем, вышеприведенный пример является определенным выходом из ситуации, нечто подобное я уже реализовывал, только рисовал без bs. Но - как уже было упомянуто - сие аз есьм г-код.
Интересует реализация именно по правилам Joomla.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
В общем, вышеприведенный пример является определенным выходом из ситуации, нечто подобное я уже реализовывал, только рисовал без bs. Но - как уже было упомянуто - сие аз есьм г-код.
Интересует реализация именно по правилам Joomla.
Тот что я код привел и есть по правилам Joomla, просто он так  написан и так давно что его трудно назвать хорошим кодом )
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
А как быть с вьюхой плагина, которую можно было бы переопределить при необходимости?
(понятно, что вьюху кнопки редактора переопределять никто не будет, а если писать фронт-плагин?)
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Используй JLayout.

Положи в папку /layouts плагина макет, например video.php. В него кинь всю HTML-разметку. Далее в плагине:

Код: php
JLayoutHelper::$defaultBasePath = JPATH_PLUGINS . '/' . $this->_type . '/' . $this->_name . '/layouts';
echo JLayoutHelper::render('video');

Если хочешь из плагина передать в макет какие-то данные, например параметры:

Код: php
$displayData = new stdClass;
$displayData->params  = $this->params;

echo JLayoutHelper::render('video', $displayData);

В макете доступ к данным получаешь через переменную $displayData:

Код: php
// Доступ к параметру
$someParam = $displayData->params->get('param', 'default');
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Что означает:
Код: php
$button->options = "{handler: 'iframe', size: {x: 800, y: 500}}";
Догадываюсь, что это указание вывода $button->link во всплывающем окне, но как заставить вьюху выводится именно там?

JHTML::_('behavior.modal'); тут играет роль?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Что означает:
Код: php
$button->options = "{handler: 'iframe', size: {x: 800, y: 500}}";
Догадываюсь, что это указание вывода $button->link во всплывающем окне, но как заставить вьюху выводится именно там?

JHTML::_('behavior.modal'); тут играет роль?
Эт вызовет squeezebox мутулзовский!
{handler: 'iframe', size: {x: 800, y: 500}} - банально параметры для squeezebox! Что вызывать в iframe и высота блока будет 500 и ширина 800 пикселей!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Понял, мутулз не нужен. А на jq такого бокса нет? только bs'овский modal?
Чтобы не рисовать свой скрипт показа бокса (showModal)?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Текс, поправка - JLayout не поддерживает переопределение модулей и плагинов, только компонентов... Тогда лучше использовать JPluginHelper::getLayoutPath. Это по аналогии с модулями.
*

aspidy

  • Завсегдатай
  • 1008
  • 55 / 1
  • Миграция joomla 1.0-1.5-2.5
Цитировать
JHTML::_('behavior.modal'); тут играет роль?
роль играет, пишется в помощнике, добавляете ссылку на вьюху и выводите окном, можете прописать и свои стили, по умолчанию Sbox идет со своим стилем
Мелкий ремонт. skype poisk-plus
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Понял, мутулз не нужен. А на jq такого бокса нет? только bs'овский modal?
Чтобы не рисовать свой скрипт показа бокса (showModal)?
Я же выше привел пример как с бутстаповским модалом сделать!
Но я бы лучше подрубил Fancybox2 и на нем запилил!
*

aspidy

  • Завсегдатай
  • 1008
  • 55 / 1
  • Миграция joomla 1.0-1.5-2.5
Цитировать
Понял, мутулз не нужен. А на jq такого бокса нет? только bs'овский modal?
Чтобы не рисовать свой скрипт показа бокса (showModal)?
на js полно окон лайт, фанси и тд окно можно вывести одной строчкой
Мелкий ремонт. skype poisk-plus
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Не, фанси лишний раз для простого плагина - ну в баню лишний скрип тянуть, оставлю на bs, фанси буду пробовать, когда надо будет для фронта без bs =)

Последний вопрос. Стили и скрипты подключаются либо инлайн либо через jhtml, $doc->AddScript(file) почему-то не подключает, в консоли смотрю - путь правильный, но - 404.
В чем фишка? в модуле прокатывает, в плагине - нет.
И еще, на локалке, где DS = '\', приходится для jhtml прописывать ручками '/', иначе обратный слэш преобразуется в %5C, что тоже приводит к 404.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Значит путь Неправильный раз 404 )
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
А зачем вы DS пишете?)
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Как бы принято, однако, значение DS разным бывает.
Ну да мне не критично, жестко / прописал везде, винда нормально понимает.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Как бы принято, однако, значение DS разным бывает.
Ну да мне не критично, жестко / прописал везде, винда нормально понимает.
Ну так, от DS отказались в тройке...
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
А если прописать:
Код: php
if (!defined('DS')) define('DS', DIRECTORY_SEPARATOR);
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Убедили =)

Решено. Спасибо всем.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Кнопка в редактор и парсинг вывода - это два расширения писать?

Автор AntonOdn

Ответов: 2
Просмотров: 843
Последний ответ 22.09.2016, 07:36:34
от AntonOdn
Коды, плагин, не знаю как правильно назвать

Автор KsandrL

Ответов: 3
Просмотров: 956
Последний ответ 15.12.2015, 15:19:41
от b2z
Идея на доработку... Или свалку. Плагин перенаправления

Автор Пастор Шлаг

Ответов: 11
Просмотров: 1315
Последний ответ 05.09.2014, 13:09:42
от Aleks.Denezh