Проблема разработки модуля с сохранением параметров модуля с использованием ajax

Я действительно новичок в Joomla, и 1.6 также очень нов, кажется, поэтому у меня возникли проблемы с сохранением данных в поле параметров модуля в задней части модуля.

Позвольте мне объяснить немного лучше.

У меня есть небольшой менеджер контактов, на который я хочу, чтобы люди подписывались с помощью модуля joomla в Joomla 1.6. Теперь модуль создан и все работает нормально. Я даже правильно создал настраиваемое поле в серверной части модуля, которое вызывает мой API и заполняет раскрывающийся список необходимыми данными.

Я хочу иметь возможность сохранить выбор в качестве параметра модуля, чтобы легко получить к нему доступ в моем шаблоне. Кажется, это очень сложно сделать, потому что я не могу найти никакой документации по этому поводу.

В основном мой процесс выглядит следующим образом.

  1. Захожу в менеджер модулей в админке Joomla.
  2. Я выбираю установленный модуль и позволяю ему открыться.
  3. Код запускается для заполнения раскрывающегося списка количеством имен списков, на которые может подписаться контакт.
  4. Кикер — я хочу иметь возможность выбрать имя списка и сохранить идентификатор в поле параметров модуля в БД Joomla при изменении с запросом ajax —

Я заставляю событие onchange работать и даже запускаю скрипт с почтовым запросом, но в файле PHP, который я использую для обработки сообщения и сохранения данных, я не могу заставить экземпляр БД выполнять какие-либо операции над ним. Это объяснение, вот код:

настраиваемое поле в бэкенде модуля

defined('_JEXEC') or die('Direct Access to this location is not allowed.');
jimport('joomla.html.html');
//import the necessary class definition for formfield
jimport('joomla.form.formfield');

// Include API utility file
require_once(dirname(__FILE__) . '/../lib/pmailer_subscription_api.php');

/**
 * Defines the JFormFieldLists class for the pMailer subscription module for
 * Joomla CMS version 1.6 to get the lists provided the API key.
 *
 * @category  Joomla
 * @package   Modules
 * @copyright 2011 Prefix Technologies Pty (Ltd) (http://www.prefix.co.za/)
 * @link      http://www.pmailer.co.za/
 */

class JFormFieldLists extends JFormField
{
    /**
     * The form field type.
     *
     * @var  string
     * @since 1.6
     */
    protected $type = 'lists'; //the form field type

    /**
     * Method to retrieve the lists that resides in your pMailer account using
     * the API.
     *
     * @return array The field option objects.
     * @since 1.6
     */
    protected function getInput()
    {
        $document = JFactory::getDocument();
        $document->addScript(
            JURI::base() . '../modules/mod_pmailer_subscription/lib/'
            . 'mod_pmailer_subscription.js'
        );

        $options = array();
        $attr = '';

        /*
         * Initialize JavaScript field attributes. This is the path to the
         * ajax handler that will save your list selection.
         */
        $attr .= $this->element['onchange'] = (string)
            'onchange="javascript: saveListSelection(\''
                . JURI::base()
                . '../modules/mod_pmailer_subscription/lib/utils.php'
            . '\')"';

        // Get the database instance
        $db = JFactory::getDbo();
        // Build the select query
        $query = 'SELECT params FROM jos_modules'
            . ' WHERE module="mod_pmailer_subscription"';
        $db->setQuery($query);
        $params = $db->loadObjectList();

        // Decode the options to get thje api key and url
        $options = json_decode($params[0]->params, true);

        // Create a new API utility class
        $api = new PMailerSubscriptionApiV1_0(
            $options['enterprise_url'],
            $options['pmailer_api_key']
        );

        // Get the lists needed for subscription
        $response = $api->getLists();

        // Make a default entry for the dropdown
        $lists = array('0' => 'Please select a list');

        // Builds the options for the dropdown
        foreach ( $response['data'] as $list )
        {
            $lists[$list['list_id']] = $list['list_name'];

        }

        // The dropdown output
        return JHTML::_(
            'select.genericlist',
            $lists,
            'mod_pmailer_lists_box',
            trim($attr),
            'id',
            'title',
            $this->value
        );

    }

}

Файл утилиты, сохраняющий параметр

$db = JFactory::getDbo();

if ( (isset($_POST['op']) === true) && ($_POST['op'] === 'saveList') )
{
    $query = 'SELECT params FROM jos_modules'
        . ' WHERE module="mod_pmailer_subscription"';
    $db->setQuery($query);
    $params = $db->loadObjectList();

    // Decode the options to get thje api key and url
    $options = json_decode($params[0]->params, true);

    $options['list_selection'] = (int)$_POST['id'];

    $new_params = json_encode($options);

    $query = 'UPDATE jos_modules SET params = "' . $new_params
        . ' WHERE module="mod_pmailer_subscription"';

    $db->query($query);

    echo 'success';

}

JavaScript

// Gets called on dropdown change event
function saveListSelection(url)
{
    // Ajax code here to save list selection
    var x = new Request({
        url: url,
        method: 'post'
    }).send('op=saveList&id=' + $('mod_pmailer_lists_box').get('value'));

}

Я надеюсь, что вы можете дать мне несколько советов, как это сделать, я застрял, как сумасшедший. Единственным ограничением является то, что он ДОЛЖЕН быть модулем. Приказы босса.


person Etienne Marais    schedule 04.05.2011    source источник
comment
лол, Joomla больше никому не нравится, я понимаю ;)   -  person Etienne Marais    schedule 04.05.2011


Ответы (1)


Похоже, этим вопросом никто не занимается.

Я нашел способ исправить это, НЕ используя ajax.

person Etienne Marais    schedule 28.06.2011