2

我遇到了连接表和检索表单数据的问题,它在 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似乎期待某些东西,鉴于应该传入的数据,我真的不知道如何处理一个表格来自不同的表格。JTablerelease.xml

总而言之,据我所知,我遇到了不同的问题:

  1. 我如何设法加入表格以在 Joomla 中处理 JForm 标准(最佳实践和正确)!?

  2. 由于我使用可重复字段类型来管理曲目列表,因此数据将存储到 JSON 中并仅在一个字段中保存到数据库中。我需要这种可重复的解决方案,因为每个版本都有n 个包含多个信息(track_no、title、genre...)的曲目,并且感谢 Joomla,终于有了一种处理此类情况的本地方法。但是:在将它们保存到数据库之前,必须将 JSON 拆分为单个值并分配给tracks-table 中的正确字段。

好的......我知道这可能是一个huuuuuge问题......但由于我完全陷入困境,我很乐意为至少一个问题提供任何建议:D

提前致谢 :)

4

0 回答 0