私は、結合されたテーブルの問題と、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 つのフォームが異なるテーブルから来ています。JTable
release.xml
要約すると、私が見ることができる限り、さまざまな問題が発生しました。
Joomla で JForm 標準を (ベスト プラクティスと正しい) 処理のためにテーブルに参加するにはどうすればよいですか? ?
繰り返し可能なフィールド タイプを使用してトラックリストを管理しているため、データは JSON に保存され、1 つのフィールドだけでデータベースに保存されます。すべてのリリースには複数の情報 (track_no、タイトル、ジャンル...) を持つnトラックがあり、Joomla のおかげで、最終的にそのようなケースを処理するネイティブな方法があるため、この繰り返し可能なソリューションが必要です。BUT: それらをデータベースに保存する前に、JSON を単一の値に分割し、テーブル内の適切なフィールドに割り当てる必要があります。
tracks
わかりました...私はこれがおそらく大変な質問であることを知っています...しかし、私は完全に立ち往生しているので、少なくとも1つの問題についてアドバイスをいただければ幸いです:D
前もって感謝します :)