我遇到了连接表和检索表单数据的问题,它在 Joomla 的最佳实践术语中“应该如何”!
据我所知,我正在遵循 Joomla! 标准,目标是编写这个组件“好像”它是原生 Joomla! 代码。
所以我有以下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 中的版本表中的一个字段。当我得到一个“可重复”字段类型时,该字段内部有 JSON,并且它到目前为止有效。
但是该组件旨在保存另一个名为“tracks”的 MySQL 表,该表包含所有版本的所有轨道,并且应该通过 tracklist-id 连接到版本表,因此我们有以下三个表:
- 发布(包含所有数据,严格绑定到单个发布/专辑/EP...)
- tracklists(是一个 1 对 m 的关系表,它有一个 tracklist_id,它与 release 连接并连接属于 tracklist 的所有单个 track_id)
- 曲目(保存所有曲目数据,例如track_title,duration,genre等,而每个曲目都有一个唯一的ID,可以加入曲目列表)
正如您所看到的,这变得越来越复杂(特别是如果您认为这不是组件的唯一部分,需要这种用于单个 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" />
因此,现在,由于将字段名称绑定到 JTable-Class 中变量的命名,因此JForm
似乎期待某些东西,鉴于应该传入的数据,我真的不知道如何处理一个表格来自不同的表格。JTable
release.xml
总而言之,据我所知,我遇到了不同的问题:
我如何设法加入表格以在 Joomla 中处理 JForm 标准(最佳实践和正确)!?
由于我使用可重复字段类型来管理曲目列表,因此数据将存储到 JSON 中并仅在一个字段中保存到数据库中。我需要这种可重复的解决方案,因为每个版本都有n 个包含多个信息(track_no、title、genre...)的曲目,并且感谢 Joomla,终于有了一种处理此类情况的本地方法。但是:在将它们保存到数据库之前,必须将 JSON 拆分为单个值并分配给
tracks
-table 中的正确字段。
好的......我知道这可能是一个huuuuuge问题......但由于我完全陷入困境,我很乐意为至少一个问题提供任何建议:D
提前致谢 :)