使用加入的JTable在编辑视图中获取表单数据?

时间:2016-08-25 14:16:13

标签: json joomla joomla3.0 jform

我遇到了连接表的问题,并检索了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>

  • 发布(保存所有数据,严格绑定到单个发行版/专辑/ ep ...)
  • 跟踪列表(是一个1到1的关系表,有一个tracklist_id,与发布一起加入并加入属于该列表的所有单个track_id)
  • 曲目(保存所有曲目数据,例如track_title,持续时间,流派等,而每个曲目都有唯一的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" />

所以现在,JForm似乎期望来自JTable的东西,因为release.xml将字段名称绑定到JTable-Class中变量的命名,我不知道真的知道如何处理,因为应该在一个表单中传递的数据来自不同的表。

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

  1. 如何设置连接表(最佳实践和权利) 在Joomla处理JForm标准!

  2. 由于我使用可重复字段类型来管理跟踪列表,因此数据将存储到JSON中并仅在一个字段中保存到数据库中。 我需要这个可重复的解决方案,因为每个版本都有 n 轨道,其中包含超过一个的信息(track_no,title,genre ...),感谢Joomla,最后还有一个本地方式处理此类案件。 但是:在将它们保存到数据库之前,必须将JSON拆分为单个值,并将其分配到tracks - 表中的相应字段。

  3. 好吧......我知道这可能是一个huuuuuge问题......但是由于我完全陷入困境,我会对至少一个问题的任何建议感到高兴:D

    提前致谢:)

0 个答案:

没有答案