新しいコンテンツ カテゴリをプログラムで DB に適切に挿入する方法を知っている人はいますか? カテゴリ テーブルの各投稿に対して、lft と rgt が設定された資産テーブルに保存された投稿もあります。プレーン SQL の代わりにこれに使用できるネイティブ Joomla クラスはありますか?
4 に答える
カテゴリがシームレスに処理するネイティブ クラスのみを使用してください。カテゴリを追加するとすぐに、すべてが自動的に処理されます。コア コンポーネントを見て、その方法を確認してください。
sql を使用して資産テーブルを更新するのは簡単ではありません。すべて非常に具体的に管理されており、一連の複雑な外部キー テーブルの一部です。
これを処理するには、JTable または JTableContent を拡張します。
クラスを使用するだけのコードをまとめた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
}
当然のことながら、データを正しく設定する必要がありますが、これらは設定するコアのものです。
これは、掘り下げて実験した後、この目的のために作成した関数です。
コアクラスを使用するため、それらへのアクセスが必要です (私にとっては基本的に Joomla コンポーネントの一部です)。
これは Joomla 3 用であり、Joomla 2.5 以前では、JModelLegacyをJModelに変更する必要があります。
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;
}
おそらく、category.php ファイルでsave()を使用できます。
ファイルの場所:root\administrator\components\com_categories\models\category.php
提供されたフォームデータを保存します!
JOS_assets テーブルは、作成される各アセットの ACL を格納するためのものです。
プログラムでカテゴリを作成するときにこのテーブルを更新しない場合、デフォルトの ACL が適用されます。後で管理パネルでカテゴリを開いて保存すると、ACL はコア Joomla! によって更新されるはずです。
ただし、SQL クエリは非常に簡単に作成でき、資産テーブルも更新できます。phpmyadmin でテーブルのコンテンツを開くと、簡単に理解できます。