質問: エラー「致命的なエラー:非オブジェクトでのメンバー関数getkeyname()の呼び出し」、ただしテーブルなし? 小さなコンポーネントを書いて、ショップコンポーネントからデータをエクスポートします。これが私の最初のコンポーネントです。「致命的なエラー:非オブジェクトpath\legacy\model\admin.phpのメンバー関数getkeyname()への呼び出し行885 "、私はいくつかの解決策を見つけましたが、私の問題は新しいテーブルを作成しないことです。私の質問は新しいsqlテーブルを回避する方法を教えてください。既存のコンポーネントのテーブルを使用していて、それらは私のコンポーネントで編集されていないためです。私の情報源:http://forum.joomla.org/viewtopic.php?f=620&t=666986 http://stackoverflow.com/questions/21156707/fatal-error-call-to-a-member-function-getkeyname http://stackoverflow.com/questions/12313272/error-call-to-a-member-function-getkeyname-component-for-joomla-2-5 この解決策から、新しいテーブルが必要であることを理解していますが、不要です...
回答: jformは通常、jmodeladminと一緒に使用するとデータベーステーブルの列にマップされるため、列の名前がaddの場合、addはそのテーブルの列になるように検索します。コンテンツコンポーネント(記事)を調べて、いくつかのフォームフィールドを調べた場合、データベーステーブルでコンテンツを確認すると、名前が一致していることがわかります。 jformを使用する場合の最善の方法は、独自のロジックを適用することです。そのため、コントローラーでjmodellegacyを使用して、デフォルトではなく、独自のモデル関数をキャッチして直接保存します。jmodeladminのほとんどすべての関数で、$table = $this->gettable();を追加して、テーブルからデータを渡したり、テーブルからデータを取得したりできるようにします。ただし、jmodellegacyではjformに直接接続されていませんが、そのサウンドからは、フォームを表示するためのクリーンな方法が必要なため、ビューにそのロジックを追加することをお勧めしますとにかくクラス(view.html.php)ただし、jmodeladminの保存/取得関数をオーバーライドしてそれを利用することはできますが、全体としてはjmodellegacyを使用するよりも作業が増える可能性があります。テーブルを使用する一般的なjoomlaの方法を使用していない場合は、コードのカスタマイズが少なくて済み、コードをよりカスタマイズできます。