誰かがこの問題の解決策を考え出したことがあるかどうか疑問に思います。私の研究は私にそうではないと教えています。少し複雑な説明ですが、うまくいけば理解できます...
サイトと管理者の両方のビューを持つコンポーネントがあります。どちらにもordering
があるので、フロントエンドのリストビューで返されるアイテムの順序を制御できます。すばらしいので、「スポーツ」ビューには、管理者が設定した任意の順序で個々の「スポーツ」を一覧表示できます。完璧です。
単一アイテムの「スポーツ」ビューでは、データは通常のgetItem()でこのビューに返されますreturn $this->_item;
。もちろん、これはテーブルの行全体です。
さて、私の問題は、アイテム( "スポーツ")ごとに列を並べ替える必要があることです。
例として、getItem()によって返されるオブジェクトは次のとおりです。 organisations
とteams
は「スポーツ」のサブフォームであるため、Joomla管理者の「編集」ビューの個別のタブに表示されることに注意してください。
スポーツID#1:
Joomla\CMS\Object\CMSObject Object ( [_errors:protected] => Array ( ) [id] => [ordering] => [state] => [checked_out] => [checked_out_time] => [created_by] => [modified_by] => [sportname] => [invented] => [founders] => [description] => [organisations] => [teams] )
これはすばらしいことですが、Sport ID#2の場合、次のように、サブフォームを含むこのオブジェクトを異なる順序で返します。
Joomla\CMS\Object\CMSObject Object ( [_errors:protected] => Array ( ) [id] => [ordering] => [state] => [checked_out] => [checked_out_time] => [created_by] => [modified_by] => [sportname] => [description] => [founders] => [invented] => [teams] => [organisations] )
各サブフォームに「順序」整数フィールドを追加し、それをビューで使用してオブジェクトをレンダリングすることを検討しましたが、これらをサブフォーム間で一意にすることはできず、サブフォームを同じ整数値に設定するユーザーエラーの余地が生まれます。
誰かがこのシナリオに遭遇しましたか?ここで私の選択肢は何ですか?
それを理解できたなら、ありがとう!
なぜ異なるビュー間で表示順序を変更する必要があるのか、私には奇妙に思えます-一貫性のないUXになるでしょうか?
ローカライズされたカスタマイズのように見えるので、アイテムのIDを確認してビューのテンプレートオーバーライドにプログラミングし、オブジェクト配列を目的のフィールド順序の一時配列に置き換えます。
いくつかの順序グループが必要な場合は、カスタムフィールドのjsonフィールドに順序を格納する必要があるかもしれません。
私が目にしたもう1つの方法は、Artickes AnywhereやSourcererなど、Regular Labsの拡張機能(www.regularlabs.com)を組み合わせて使用することです。その後、フィールドに基づいて切り替えることができるレイアウトを構築できます。
私があなたを正しく理解したと仮定して、これが私の提案です。
編集フォームで別のタブ「列の順序」を使用して、管理者がさまざまな列が表示される順序を指定できるようにします。これは明らかにカスタムフィールドである必要があります。
データベースにjson文字列として格納することをお勧めします。キーは列名、値は順序(1、2、3、...)です。そのため、コンポーネントデータベーステーブルに新しい列を指定するか、このjson文字列を既存のjsonフィールドに追加します(既にある場合)。
注文を有効にするためにJoomlaと同じUIアプローチを使用してみることができます。コードはmedia/jui/js/sortablelist.jsにあり、 jQuery Sortable に基づいています。したがって、このカスタムフィールド用に独自のバージョンのJavaScriptを作成してみることができます。 Joomla jsコードは、行が順序付けの新しい位置にドラッグされるたびにサーバーへのajax呼び出しを行うため、そのアプローチに従うことをお勧めします。