時々、Joomla!の構造をカスタマイズする必要があります!ユーザーに日付、場所、テキスト1、テキスト2などのデータを入力できるさまざまなテキストエリア/入力を提案するためのカスタムフィールドを持つ記事.
そうすれば、フロントエンドでのデザインの処理が簡単になります。 CSSルールを使用すると、各コンテンツが正しく設計されます。
K2やSeblodなどのCCKコンポーネントでそれができることを知っています。
コンポーネントなしで、phpを使用してJoomlaにいくつかの変更を追加する他の方法はありますか?
私はあなたの解決策を持っていると信じていますが、コアをハックしないでください。私たちfeltは、何年にもわたってそうすることを余儀なくされており、現在でも代償を払っています。他のコンポーネントとの一般的な非互換性。
私たちが今やっていることはこれです:
#__content_ext
には、#__content
と同一のキーフィールドと、必要な各カスタムフィールドの列が含まれています。#__categories_ext
には、#__categories
と同じキーフィールドと、必要な各カスタムフィールドの列が含まれています。この時点で、com_content
のすべてのコード/ロジックをシングルコアハックなしで活用しています。ただし、カスタムフィールドはすべてJoomlaテーブルのparams
列とattribs
列に格納されているため、必要な他のカスタムコードでデータベースを一般的に使用するのには理想的ではありません。これが「魔法」の出番です。
上記のテーブル拡張を作成/更新するには、以下のサンプルコードを使用して簡単なコンテンツプラグインを記述します。これにより、すべてのカスタムフィールドがカスタムテーブルに配置され、SQLで必要な目的に使用できます。
public function onContentAfterSave($context=null, $article=null, $isNew=0) {
if($context == 'com_categories.category') {
$params = new JRegistry;
$params->loadString($article->params);
$myObj = $params->toObject();
// Use properties from $article and $myObj to create/update #__categories_ext
// Use $article->id as the primary key if #__categories_ext
// Your SQL goes here....
}elseif($context=='com_content.article'){
$attribs = new JRegistry;
$attribs->loadString($article->attribs);
$myObj = $attribs->toObject();
// Use properties from $article and $myObj to create/update #__content_ext
// Use $article->id as the primary key if #__content_ext
// Your SQL goes here....
}
}
確かに、データは2回保存されます。1回はカスタムコンテンツとして、もう1回はカスタムテーブルに保存されますが、サイトを最新のJoomlaバージョンに維持するつもりである場合にコアハックにかかる作業と悲しみの代償として、正規化ルールを曲げることになります。 。また、ハッキングの影響を受けることなく、com_contentを使用するすべてのcom_contentおよびその他の拡張機能を使用できる状態にした。
私も最近これを行う必要があり、いくつかのオンラインの例をたどりました。
Joomlaのドキュメントを含むいくつかの良い例があります here
別の素敵なチュートリアルはここにあります- カスタムコンテンツフィールドをJoomlaに追加
CCKを使いたくないと思いますが、 Fields Attach を確認してください。これは非常に優れており、シンプルです
これらの助けを願っています。
コアの拡張とは別に、joomlaのコンテンツをカスタムフィールドで拡張できる拡張機能がいくつかあります。
それ以外の場合、他の回答で提供されている提案とチュートリアルは「続行します」。