我是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'。如何实现这一目标?
答案 0 :(得分:1)
谢谢,我找到了解决方案。如果有人有同样的问题:
我从
$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。它为您创建代码,因此您最终不会在这样的小问题上浪费那么多时间,并且可以专注于开发使您的组件独一无二的东西。