使用ajax保存模块参数的模块开发问题



我对Joomla真的很陌生,1.6也很新,所以我在模块后端将数据保存到模块参数字段中有点麻烦。

让我再解释一下。

我有一个小的联系人管理器,我希望人们使用joomla 1.6中的joomla模块来订阅它。现在模块已经创建,一切正常工作。我甚至正确地在模块后端创建了一个自定义字段,该字段调用我的API,并用所需的数据填充下拉框。

我希望能够将选择保存为模块参数,以便在我的模板中轻松访问它。这似乎很难做到,因为我找不到任何关于它的文档。

基本上我的过程如下。

  1. 我去Joomla的模块管理器管理。
  2. 我选择我安装的模块,让它打开。
  3. 代码运行以填充下拉框中有数量列表
  4. 联系人可订阅的名称。
  5. 踢球者 -我希望能够选择列表名称并保存ID的模块参数字段中使用ajax更改Joomla DB请求——

我得到onchange事件的工作,甚至运行脚本与post请求,但在PHP文件中,我用来处理post和保存数据,我不能得到DB实例对它做任何操作。这就是解释,下面是代码:

模块后端自定义字段

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'));
}

我希望你能给我一些建议,我怎么才能做到这一点,我像疯了一样。唯一的限制是它必须是一个模块。老板的命令。

似乎没有人与这个问题有关。

我已经找到了一种方法来修复它,虽然不使用ajax

相关内容

  • 没有找到相关文章

最新更新