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 のreleases-table のフィールドです。「繰り返し可能な」フィールドタイプを取得したため、そのフィールド内に JSON があり、これまでのところ機能しています。

しかし、コンポーネントは「tracks」と呼ばれる別の MySQL テーブルを保持することを意図しており、これはすべてのリリースのすべてのトラックを保持し、tracklist-id によって release テーブルに結合する必要があるため、次の 3 つのテーブルが作成されます。

  • リリース (単一のリリース/アルバム/EP に厳密にバインドされているすべてのデータを保持します...)
  • tracklists (これは tracklist_id を持つ 1 対 m の関係テーブルで、リリースと結合され、tracklist に属するすべての単一の 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" />

したがって、フィールド名をJTable-Classの変数の名前にバインドするため、JForm何かが来ることを期待しているように見えますが、渡す必要があるデータを考えると、それを処理する方法が本当にわかりません1 つのフォームが異なるテーブルから来ています。JTablerelease.xml

要約すると、私が見ることができる限り、さまざまな問題が発生しました。

  1. Joomla で JForm 標準を (ベスト プラクティスと正しい) 処理のためにテーブルに参加するにはどうすればよいですか? ?

  2. 繰り返し可能なフィールド タイプを使用してトラックリストを管理しているため、データは JSON に保存され、1 つのフィールドだけでデータベースに保存されます。すべてのリリースには複数の情報 (track_no、タイトル、ジャンル...) を持つnトラックがあり、Joomla のおかげで、最終的にそのようなケースを処理するネイティブな方法があるため、この繰り返し可能なソリューションが必要です。BUT: それらをデータベースに保存する前に、JSON を単一の値に分割し、テーブル内の適切なフィールドに割り当てる必要があります。tracks

わかりました...私はこれがおそらく大変な質問であることを知っています...しかし、私は完全に立ち往生しているので、少なくとも1つの問題についてアドバイスをいただければ幸いです:D

前もって感謝します :)

4

0 に答える 0