web-dev-qa-db-ja.com

記事の構造を変更するには?

時々、Joomla!の構造をカスタマイズする必要があります!ユーザーに日付、場所、テキスト1、テキスト2などのデータを入力できるさまざまなテキストエリア/入力を提案するためのカスタムフィールドを持つ記事.

そうすれば、フロントエンドでのデザインの処理が簡単になります。 CSSルールを使用すると、各コンテンツが正しく設計されます。

K2やSeblodなどのCCKコンポーネントでそれができることを知っています。

コンポーネントなしで、phpを使用してJoomlaにいくつかの変更を追加する他の方法はありますか?

4

私はあなたの解決策を持っていると信じていますが、コアをハックしないでください。私たちfeltは、何年にもわたってそうすることを余儀なくされており、現在でも代償を払っています。他のコンポーネントとの一般的な非互換性。

私たちが今やっていることはこれです:

  1. 新しいテーブル#__content_extには、#__contentと同一のキーフィールドと、必要な各カスタムフィールドの列が含まれています。
  2. 新しいテーブル#__categories_extには、#__categoriesと同じキーフィールドと、必要な各カスタムフィールドの列が含まれています。
  3. カスタムフィールドをcom_contentに追加します(私たちは Aixeena CCK を使用しており、カスタムフィールドをコンテンツ、カテゴリ、およびメニューに追加できます) 。

この時点で、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およびその他の拡張機能を使用できる状態にした。

10
GDP

私も最近これを行う必要があり、いくつかのオンラインの例をたどりました。

Joomlaのドキュメントを含むいくつかの良い例があります here

別の素敵なチュートリアルはここにあります- カスタムコンテンツフィールドをJoomlaに追加

CCKを使いたくないと思いますが、 Fields Attach を確認してください。これは非常に優れており、シンプルです

これらの助けを願っています。

3
jonboy

コアの拡張とは別に、joomlaのコンテンツをカスタムフィールドで拡張できる拡張機能がいくつかあります。

それ以外の場合、他の回答で提供されている提案とチュートリアルは「続行します」。

2
FFrewin