2

新しいコンテンツ カテゴリをプログラムで DB に適切に挿入する方法を知っている人はいますか? カテゴリ テーブルの各投稿に対して、lft と rgt が設定された資産テーブルに保存された投稿もあります。プレーン SQL の代わりにこれに使用できるネイティブ Joomla クラスはありますか?

4

4 に答える 4

2

カテゴリがシームレスに処理するネイティブ クラスのみを使用してください。カテゴリを追加するとすぐに、すべてが自動的に処理されます。コア コンポーネントを見て、その方法を確認してください。

sql を使用して資産テーブルを更新するのは簡単ではありません。すべて非常に具体的に管理されており、一連の複雑な外部キー テーブルの一部です。

これを処理するには、JTable または JTableContent を拡張します。

于 2013-02-21T22:39:50.890 に答える
2

クラスを使用するだけのコードをまとめたJTableCategoryので、Joomlaのフロントまたは管理側で簡単に使用できます

$table = JTable::getInstance('category');

$data = array();
// name the category
$data['title'] = $title;
// set the parent category for the new category
$data['parent_id'] = $parent_id;
// set what extension the category is for
$data['extension'] = $extension;
// Set the category to be published by default
$data['published'] = 1;

// setLocation uses the parent_id and updates the nesting columns correctly
$table->setLocation($data['parent_id'], 'last-child');
// push our data into the table object
$table->bind($data);
// some data checks including setting the alias based on the name
if ($table->check()) {
    // and store it!
    $table->store();
    // Success
} else {
    // Error
}

当然のことながら、データを正しく設定する必要がありますが、これらは設定するコアのものです。

于 2013-12-13T12:03:19.923 に答える
1

これは、掘り下げて実験した後、この目的のために作成した関数です。

コアクラスを使用するため、それらへのアクセスが必要です (私にとっては基本的に Joomla コンポーネントの一部です)。

これは Joomla 3 用であり、Joomla 2.5 以前では、JModelLegacyJModelに変更する必要があります。

function createCategory( $name, $parent_id, $note )
{
    JTable::addIncludePath( JPATH_ADMINISTRATOR . '/components/com_categories/tables' );

    $cat_model = JModelLegacy::getInstance( 'Category', 'CategoriesModel' );

    $data = array (
        'id' => 0,
        'parent_id' => $parent_id,
        'extension' => 'com_content',
        'title' => $name,
        'alias' => '',
        'note' => $note,
        'description' => '',
        'published' => '1',
        'access' => '1',
        'metadesc' => '',
        'metakey' => '',
        'created_user_id' => '0',
        'language' => '*',
        'rules' => array(
            'core.create' => array(),
            'core.delete' => array(),
            'core.edit' => array(),
            'core.edit.state' => array(),
            'core.edit.own' => array(),
        ),
        'params' => array(
            'category_layout' => '',
            'image' => '',
        ),
        'metadata' => array(
            'author' => '',
            'robots' => '',
        ),
    );

    if( !$cat_model->save( $data ) )
    {
        return NULL;
    }

    $categories = JCategories::getInstance( 'Content' );
    $subcategory = $categories->get( $cat_model->getState( "category.id" ) );
    return $subcategory;
}
于 2013-10-20T07:33:06.860 に答える
0

おそらく、category.php ファイルでsave()を使用できます。

ファイルの場所:root\administrator\components\com_categories\models\category.php

提供されたフォームデータを保存します!

JOS_assets テーブルは、作成される各アセットの ACL を格納するためのものです。

プログラムでカテゴリを作成するときにこのテーブルを更新しない場合、デフォルトの ACL が適用されます。後で管理パネルでカテゴリを開いて保存すると、ACL はコア Joomla! によって更新されるはずです。

ただし、SQL クエリは非常に簡単に作成でき、資産テーブルも更新できます。phpmyadmin でテーブルのコンテンツを開くと、簡単に理解できます。

于 2013-02-21T16:54:28.957 に答える