使用select = selected选项的Joomla 2.5自定义字段

时间:2014-02-04 17:15:17

标签: joomla2.5 custom-component custom-fields

我是Joomla和PHP开发的新手。我创建了2个数据库表 - prodcategories和languages:

CREATE TABLE #__bbb_languages (
   id   INTEGER AUTO_INCREMENT not null,
   language VARCHAR(2),
   CONSTRAINT pk_#__bbb_languages PRIMARY KEY (id)
)   ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO #__bbb_languages (language)
VALUES ('de'), ('fr'); 

CREATE TABLE #__bbb_prodcategories (
   id   INTEGER AUTO_INCREMENT not null,
   name VARCHAR(255),
   language INTEGER,
   FOREIGN KEY (language) REFERENCES #__bbb_languages(id),
   CONSTRAINT pk_#__bbb_prodcategories PRIMARY KEY (id)  
)   ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO #__bbb_prodcategories (name, language)
VALUES ('IP-Produkte', 1), ('IP-Produits', 2);

我正在阅读这个http://library.logicsistemi.it/en/joomla/developing-joomla-25-mvc-components/30-developing-mvc-components-joomla25-part8教程,现在正在添加和编辑记录。我创建了一个自定义字段语言:

模型/场/ language.php

<?php
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die('Restricted access');

jimport('joomla.form.formfield');
JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields');

class JFormFieldLanguage extends JFormField {

    protected $type = 'Language';

    public function getInput() {

        $db = JFactory::getDBO();
        $query = $db->getQuery(true);
        $query->select('id, language');
        $query->from('#__bbb_languages');
        $db->setQuery((string)$query);
        $messages = $db->loadObjectList();

        $options[] = JHTML::_('select.option','',JText::_('Please choose a language'));

        foreach($messages as $message) {
            $options[] = JHtml::_('select.option', $message->id, $message->language);
        }

        return JHTML::_('select.genericlist', $options, $name=$this->name, $attribs = null, $key='value', $text='text');
    }           
}

模型/形式/ prodcategorie.xml

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fieldset addfieldpath="/administrator/components/com_bbb/models/fields">
        <field 
            name="id" 
            type="hidden" />
        <field 
            name="name" 
            type="text" 
            label="NAME"
            size="40"
            class="inputbox" />
       <field name="language" 
            type="Language" 
            label="Language"
            required="true"/>
    </fieldset>
</form>

模型/ prodcategorie.php

<?php
defined('_JEXEC') or die();
jimport( 'joomla.application.component.modeladmin' );

class BbbModelProdcategorie extends JModelAdmin
{    
    public function getForm($data = array(), $loadData = true)
    {
        // Get the form
         $form = $this->loadForm('com_bbb.prodcategorie', 'prodcategorie', 
         array('control' => 'jform', 'load_data' => $loadData));
        if (!$form) {
            return false;
        } else {
            return $form;
        }
    }

public function loadFormData()
    {
        // Load form data
        $data = $this->getItem();
        return $data;
    }
}

视图/ prodcategorie / TMPL / edit.php

<?php 
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

$option = JRequest::getCmd('option');

JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
?>
<form action="index.php" method="post" name="adminForm" id="prodcategorie-admin-form" class="form-validate">
    <input type="hidden" name="option" value="<?=$option?>" />
    <input type="hidden" name="task" value="" />
    <input type="hidden" name="id" value="<?=$this->item->id?>" />
    <?php echo JHtml::_('form.token'); ?>

    <fieldset class="adminform">
        <legend><?=JText::_( 'DETAILS' ); ?></legend>
        <ul class="adminformlist">
            <?    foreach ($this->form->getFieldset() as $field) { ?>
            <li><?=$field->label?><?=$field->input?></li>
            <?    } ?>
        </ul>
    </fieldset>
</form>

代码的大部分内容只是使用更改后的名称从教程中复制/粘贴。我自己只添加了自定义字段的部分。我的问题是,当我想编辑一个prodcategorie时,表单会显示带有所有选项的语言字段(请选择一种语言/ de / fr),但我需要预先选择正确的prodcategorie语言。例如。如果我打开'IP-Produits'进行编辑,则预先选择语言中的'fr'。如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

谢谢,我找到了解决方案。如果有人有同样的问题:
我从

中获取了URL中的prodcategorie的id
 $prodcategorieid=JRequest::getInt('id');

之后我再次在 models / fields / language.php 中查询数据库(顺便说一下,为了不与标准语言字段混淆,我更改了名称),选择此prodcategorie的语言并使用该行选择它:

return JHTML::_('select.genericlist', $options, $name=$this->name, $attribs = null, $key='value', $text='text', $selected = $langid[0]->id);

$ langid是db查询的结果 它肯定不是一个完整的解决方案,但它对我有用。

答案 1 :(得分:0)

您应该考虑使用标准语言字段:

http://docs.joomla.org/Language_form_field_type

你应该考虑使用Joomla Component Creator。它为您创建代码,因此您最终不会在这样的小问题上浪费那么多时间,并且可以专注于开发使您的组件独一无二的东西。