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

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Проблема при разработке модуля с сохранением параметров модуля с помощью ajax

Сообщение Anonymous »

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

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

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

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

В основном мой процесс выглядит следующим образом.
  • Я захожу в менеджер модулей в Joomla
    admin.
  • Я выбираю установленный модуль и открываю
    его.
  • Код запускается для заполнения
    раскрывающегося списка списком
    имен, на которые может подписаться контакт.
  • Изюминка – я хочу иметь такую возможность чтобы
    выбрать имя списка и сохранить идентификатор
    в поле параметров модуля в
    Joomla DB onchange с 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'));

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

Подробнее здесь: https://stackoverflow.com/questions/588 ... using-ajax
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»