我遇到了连接表的问题,并检索了Form-Data在Joomla的最佳实践条款中应该如何“应该”!
就我的知识到达而言,我正在遵循Joomla!-standards,目标是将这个组件写成“好像”它是原生的Joomla!-Code。
所以我拥有以下COM_COMPONENT\models\release.php
<?php
defined('_JEXEC') or die;
class DojoMusicLibraryModelRelease extends JModelAdmin
{
public function getTable( $type = 'Releases', $prefix = 'DojoMusicLibraryTable', $config = array() )
{
return JTable::getInstance($type, $prefix, $config);
}
public function getForm( $data = array(), $loadData = true )
{
$options = array('control' => 'jform', 'load_data' => $loadData);
$form = $this->loadForm('releases', 'release', $options);
if (empty($form)) {
return false;
}
return $form;
}
protected function loadFormData()
{
$app = JFactory::getApplication();
$data = $app->getUserState('com_dojomusiclibrary.edit.release.data', array());
if (empty($data)) {
$data = $this->getItem();
}
return $data;
}
}
并在COM_COMPONENT\tables\releases.php
<?php
defined('_JEXEC') or die;
class DojoMusiclibraryTableReleases extends JTable
{
public $id;
public $title;
public $alias;
public $artist_id;
public $release_date_digital;
public $release_date_physical;
public $ean;
public $catalog_number;
public $promotional_text;
public $is_compilation;
public $format_id;
public $release_status;
// TODO: This tracklist should not be in this table, but only an id referring to it
public $tracklist;
public $created_at;
public $modified_at;
public $state;
public $publish_up;
public $publish_down;
public function __construct($db)
{
parent::__construct('#__dojomusiclibrary_releases', 'id', $db);
}
}
现在,正如您在后面的代码示例中的注释中所看到的,变量$tracklist
现在是我MySQL中的releases-table中的一个字段。当我得到一个“可重复的”字段类型时,该字段内部有JSON,它可以工作到目前为止。
但该组件是为了保存另一个名为“tracks”的MySQL表,它保存所有版本的所有轨道,并且应该通过tracklist-id连接到releases表,以便我们有以下三个表: / p>
正如您所看到的,这变得越来越复杂(特别是如果您认为这不是组件的唯一部分,那么将需要单个JForm的这种连接表)。
摘自COM_COMPONENT\models\forms\release.xml
<!-- CATALOG NUMBER -->
<field name="catalog_number" type="text"
label="COM_DOJOMUSICLIBRARY_FORM_FIELD_CATALOG_NUMBER_LABEL"
description="COM_DOJOMUSICLIBRARY_FORM_FIELD_CATALOG_NUMBER_DESC" />
所以现在,JForm
似乎期望来自JTable
的东西,因为release.xml
将字段名称绑定到JTable-Class中变量的命名,我不知道真的知道如何处理,因为应该在一个表单中传递的数据来自不同的表。
总而言之,就我所见,我遇到了不同的问题:
如何设置连接表(最佳实践和权利) 在Joomla处理JForm标准!
由于我使用可重复字段类型来管理跟踪列表,因此数据将存储到JSON中并仅在一个字段中保存到数据库中。
我需要这个可重复的解决方案,因为每个版本都有 n 轨道,其中包含超过一个的信息(track_no,title,genre ...),感谢Joomla,最后还有一个本地方式处理此类案件。
但是:在将它们保存到数据库之前,必须将JSON拆分为单个值,并将其分配到tracks
- 表中的相应字段。
好吧......我知道这可能是一个huuuuuge问题......但是由于我完全陷入困境,我会对至少一个问题的任何建议感到高兴:D
提前致谢:)