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

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Есть модуль
В модуле много настроек

Задача:
После сохранения, запустить php-скрипт, который выполняет определенные операции, используя сохраненные параметры.
Причем, это должно происходить не при стандартной процедуре сохранения, а по выбору администратора.

Что я сделал:
Создал свой тип поля, тупо вставив кнопку "Сохранить"
Код: php
<?php
defined('_JEXEC') or die('Restricted access');
jimport('joomla.form.formfield');
 
class JFormFieldFbr extends JFormField {

    public function getInput() {
    
        $str_save = 'Joomla.submitbutton(\'module.apply\')';
        
        $getButton = '<a onclick="'. $str_save .'" class="btn btn-success">Создать файл</a>';
        
            return $getButton;
    }

}
?>

Теперь я могу сохранять модуль собственной кнопкой! :)
И на этом пока все ... Мозги остановились.

Подскажите, плз :

1. Тем ли путем я пошел? Если нет - куда идти?
2. Где живет Joomla.submitbutton('module.apply')?
3. Ну и сабж - куда и как прикрутить свой скрипт?

Спасибо)
« Последнее редактирование: 20.06.2015, 17:02:44 от fbr »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Ну вообще функционал модуля не подразумевает такие вещи изначально. Но мне приходилось делать это. Вкратце я писал AJAX запрос на другой скрипт, который будет эти параметры обрабатывать. Много подводных камней. Task может быть 'modules.apply' и 'modules.save' вместо 'module.apply' и 'module.save' на фронте и в админке они отличаются (это насколько я помню, можете проверить). Проблемы с безопасностью могут быть( потому что нельзя передать и проверить токен формы из бекенда на  фронт и наоборот т.к. разные сессии). В отдельном скрипте я делал проверку:

Код: php
...
  $apptype = isset($_POST['apptype'])? $_POST['apptype'] : '';
  $app = JFactory::getApplication($apptype);
  $app->initialise();
  JSession::checktoken();
...

Но лучше написать плагин и AJAX запрос к этому плагину через админку или фронт в зависимости от того где редактируется модуль.
интернет-блог: http://websiteprog.ru
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
.. Проблемы с безопасностью могут быть( потому что нельзя передать и проверить токен формы из бекенда на  фронт и наоборот т.к. разные сессии)...

Все происходит в админке. Фронта нет вообще.

Может мы Неправильно друг друга поняли. Поясню.

В настоящий момент скрипт запускается с фронта при обновлении страницы. Но когда на странице выведено 2 модуля этого типа  - возникает конфликт.
И я хочу от этого уйти, запуская скрипт из админки своей кнопкой.
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Вот пример, из менеджера шаблонов:

Код: html4strict
<button onclick="Joomla.submitbutton('template.less')" class="btn btn-small">
<span class="icon-play"></span> Компилировать LESS
</button>

Где все это живет?
Нужно нечто подобное сделать у себя в модуле: по клику Сохранить+запуск скрипта

*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
по выбору пользователя
Пользователь имеет доступ к админке?

P.S. Лучше набросить простенький компонент, который будет выполнять желаемые действия.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Да, именно для администратора это и делается!
Извиняюсь, что обозвал пользователями ))

Модуль тянет из com_content. Так что наверное будет лишним писать свой
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Модуль тянет из com_content. Так что наверное будет лишним писать свой
Никаких проблем не вижу. Пока будете извращаться с AJAX и отдельным скриптом - затрата выдет такой же.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Мне почему-то кажется, что ключевой вопрос
Цитировать
2. Где живет Joomla.submitbutton('module.apply')?

т.е. выдернуть код сохранения, дописать свой и запускать на onclick
нет?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Мне почему-то кажется, что ключевой вопрос
т.е. выдернуть код сохранения, дописать свой и запускать на onclick
нет?
Хотите править ядро?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Хотите править ядро?
упаси Господи ...
Хочу посмотреть как работает, попытаться использовать тот же код у себя в модуле
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Понятно, вам нужна кнопка сохранения параметров модуля на фронте. Ну вобщем похожая задача. Посмотрите этот файл \components\com_config\view\modules\tmpl\default.php и default_options.php в последних версиях Joomla 3.4.x . Они отвечают за редактирования настроек модуля на фронте. Можете написать форму по подобию но вам ведь еще эти данные надо в своем скрипте где то обрабатывать я так понимаю? Значит отсылать AJAX запрос на отдельный скрипт или плагин который эти данные будет обрабатывать.

Вобщем это все голимые костыли на самом деле и модули для этого не предназначены. Пишите компонент.
интернет-блог: http://websiteprog.ru
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Сам не делал, чистая теория. Заглянул в модели компонента com_modules. Есть там событие onExtensionAfterSave. Наверное можно плагин группы extension сделать и обработать onExtensionAfterSave.
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Вобщем это все голимые костыли на самом деле и модули для этого не предназначены. Пишите компонент.

мда..
Надеялся что можно что-то вставить в onclick="..."
Видимо ошибался, все не так просто
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Сам не делал, чистая теория. Заглянул в модели компонента com_modules. Есть там событие onExtensionAfterSave. Наверное можно плагин группы extension сделать и обработать onExtensionAfterSave.
А вот это уже интересно! Посмотрю
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
О, кстатии да вариант и onExtensionBeforeSave есть событие. Не замечал, ну тогда вобще супер.  Пишите плагин.
интернет-блог: http://websiteprog.ru
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Посмотрел. Да, думаю, что плагин решит проблему.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Ребята, спасибо всем кто помогал))
Вариант с плагином на событие onExtensionAfterSave работает.

Случай не очень типичный, все равно выкладываю решение.
Может кому пригодится.
Иногда необязательные операции лучше выполнить по-тихому в бэкэнде, а не при перезагрузке страницы на фронте.

Код: php
// Файл плагина

defined( '_JEXEC' ) or die;

class plgExtensionFbr extends JPlugin {

  public function __construct( & $subject, $config ) {
parent::__construct( $subject, $config );
$this->loadLanguage();
  }

  public function onExtensionAfterSave($data, &$table, $isNew = 0) {
    // проверка на свой модуль
    if ( $table->module === 'mod_mymodule') {
    
      $mod_id = $table->id;
      $params = json_decode($table->get('params'));
      
      // проверка параметра разрешения на перезапись
      if ($params->rewrite_on) {
        require_once JPATH_SITE.'/modules/mod_mymodule/action.php';
      }
      
    }
    
  }
}

// Файл mod_mymodule/action.php

defined( '_JEXEC' ) or die;
// достаем нужные параметры модуля
$param_1 = $params->some_param;
$param_1 = $params->some_param2;

// обработка параметров

// создаем/перезаписываем файл
$fp = file_put_contents(__DIR__.'/css/settings'. $mod_id .'.css', $result_content);

И все же интересно,  где живет Joomla.submitbutton('module.apply')
Посмотреть бы одним глазком, чем он там занимается ..
« Последнее редактирование: 21.06.2015, 17:26:10 от fbr »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Ничего интересного, просто отправляет форму с параметрами \media\system\js\core-uncompressed.js
интернет-блог: http://websiteprog.ru
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывести дату завершения публикации модуля publish_down

Автор theflame

Ответов: 7
Просмотров: 4405
Последний ответ 06.10.2017, 12:46:30
от NewUsers
вывести данные из модуля с формой Subform form field type

Автор Glog

Ответов: 19
Просмотров: 1706
Последний ответ 22.06.2017, 13:32:07
от Glog
Зависимость модуля от компонента и страницы

Автор Тренд

Ответов: 34
Просмотров: 2449
Последний ответ 16.06.2017, 19:48:39
от dmitry_stas
Подправить скрипт выбора города

Автор misteri27

Ответов: 8
Просмотров: 1588
Последний ответ 21.02.2017, 18:47:13
от misteri27
PHP скрипт для автоматической очистки таблиц в Базе Данных MySQL

Автор LovelyHost

Ответов: 46
Просмотров: 6887
Последний ответ 17.12.2016, 14:32:28
от vipiusss