PHPを使用してカテゴリ、サブカテゴリ、記事を作成する


10

PHPスクリプトを使用してJoomlaのカテゴリ、サブカテゴリ、および記事を動的に作成することは可能ですか?

リンクの例はありますか?


2
はい、それは可能ですが非常に難しいのでcom_content、Joomlaの最も複雑な組み込み拡張機能であるPHPに非常に精通している場合を除いて、これはお勧めしません。現在の機能の一部を拡張し、独自のクラスを作成するという別の方法でアプローチすることもできます
Lodder

@Lodder回答ありがとうございます。正直に言うと、phpの知識があり、バックエンドインターフェイスを使用してJoomlaを使用しています。私が作りたいのは、Joomla管理コンソールを使用していくつかの機能(メニュー、ページなど)を追加し、phpスクリプトを使用して小さな変更を加えたいサイトを作成することです。それを作るためのチュートリアルの種類はありますか?
useruseruser 2014年

回答:


15

これを行うにはかなり広範囲にわたるプロセスですが、ここでは、私が一般的に使用するコードの縮小バージョンを示します。私たちが途中で行う内部の要素の束を取り除いたので、それが図のように実行されることを必ずしも保証しませんが、これらはあなたがそれを行うために必要な部分です。

あなたは、テーブルを見てする必要があります#__categoriesし、#__contentあなたが移入し、与えられたにそれらを追加したいすべてのフィールドを取得する$category_data$article_data配列を。

私はあなたがいることを言及する必要があります可能性があり、それはjDatabaseまたはJTableの持つレコードを挿入実現していますが、不足しているだろうことは重要なことがあるので、私は、一般的にそれをお勧めしていないと思います内蔵の一意性をチェックするようなことを行うJoomlaのルールやロジックエイリアスの追加、および新しいコンテンツアイテムのACLの管理。

if (!defined('_JEXEC')) {
    define( '_JEXEC', 1 );
    define('JPATH_BASE', realpath(dirname(__FILE__)));
    require_once ( JPATH_BASE .'/includes/defines.php' );
    require_once ( JPATH_BASE .'/includes/framework.php' );
    defined('DS') or define('DS', DIRECTORY_SEPARATOR);
}
$app = JFactory::getApplication('site');

$category_data['id'] = 0;
$category_data['parent_id'] = 0;
$category_data['title'] = 'My Category Title';
$category_data['alias'] = 'my-categegory-title-alias';
$category_data['extension'] = 'com_content';
$category_data['published'] = 1;
$category_data['language'] = '*';
$category_data['params'] = array('category_layout' => '','image' => '');
$category_data['metadata'] = array('author' => '','robots' => '');

$category_id = createCategory($category_data);
if(!$category_id){
    echo "Category create failed!";
}else{
    $article_data = array(
        'id' => 0,
        'catid' => $category_id,
        'title' => 'My article title',
        'alias' => 'my-article-alias',
        'introtext' => 'My intro text',
        'fulltext' => '<p>My full text</p>',
        'state' => 1,
        'language' => '*'
    );
    $article_id = createArticle($article_data);
    if(!$article_id){
        echo "Article create failed!";
    }
}

function createCategory( $data )
{
    $data['rules'] = array(
        'core.edit.state' => array(),
        'core.edit.delete' => array(),
        'core.edit.edit' => array(),
        'core.edit.state' => array(),
        'core.edit.own' => array(1=>true)
    );

    $basePath = JPATH_ADMINISTRATOR.'/components/com_categories';
    require_once $basePath.'/models/category.php';
    $config  = array('table_path' => $basePath.'/tables');
    $category_model = new CategoriesModelCategory($config);
    if(!$category_model->save($data)){
        $err_msg = $category_model->getError();
        return false;
    }else{
        $id = $category_model->getItem()->id;
        return $id;
    }
}
function createArticle($data)
{
    $data['rules'] = array(
        'core.edit.delete' => array(),
        'core.edit.edit' => array(),
        'core.edit.state' => array(),
    );

    $basePath = JPATH_ADMINISTRATOR.'/components/com_content';
    require_once $basePath.'/models/article.php';
    $config = array();
    $article_model = new ContentModelArticle($config);
    if(!$article_model->save($data)){
        $err_msg = $article_model->getError();
        return false;
    }else{
        $id = $article_model->getItem()->id;
        return $id;
    }
}

もちろんJoomlaをロードする必要があるため、既存のコードで実行していない場合は、ロードする必要があります。私はそれを達成するために私の答えを更新しましたので、あなたは行ってもいいです。
GDP

このコードではなく、Joomla自体が行うように、Joomlaモデルを使用してモデルを追加します。このコードをphpファイルに入れ、$ data配列に更新したい他のフィールドを入力して、正常に実行できるはずです。数分待ってください。100%機能的なコードが含まれるように回答を更新します。
GDP

更新されたコードは、そのまま実行すると、カテゴリとその中の記事を作成するようになりました。参考までに、どちらかに対して0ではなく有効なIDを指定すると、そのカテゴリまたは記事は追加されずに更新されます。また、ACLルールはオプションです... ACLを使用するスクリプトの1つからこれをコピーしたので、そこにあるのですが、知っておくと便利です。
GDP

1
テンプレートまたはMVCがその一部であると想定せずに、達成したいことを定式化することをお勧めします。プラグインは一般的にJoomlaが行うことをカスタマイズする最良の方法ですが、何をしたいかを明確にすることは、最良のソリューションが何であるかを決定するために最も重要です。
GDP

1
このソリューションはまだJoomlaでうまく機能しています!3.9.11
AndyGaskell

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.