Buat kategori, subkategori dan artikel menggunakan php

10

Apakah mungkin untuk secara dinamis membuat kategori, subkategori dan artikel Joomla menggunakan skrip PHP?

Apakah ada tautan contoh?

useruseruser
sumber
2
Ya itu mungkin tetapi sangat sulit dan saya akan menyarankan untuk tidak melakukannya kecuali Anda sangat terbiasa dengan PHP seperti com_contentekstensi bawaan yang paling kompleks di Joomla. Anda mungkin ingin mendekati ini dengan cara yang berbeda, mungkin memperluas beberapa fungsi saat ini dan menulis kelas Anda sendiri
Lodder
@Lodder terima kasih atas jawaban Anda. Sejujurnya saya memiliki pengetahuan tentang php dan saya menggunakan Joomla menggunakan antarmuka backend. Yang ingin saya buat adalah memiliki situs tempat saya menambahkan beberapa fitur menggunakan konsol admin Joomla (menu, halaman, dll.) Dan saya ingin membuat perubahan kecil menggunakan skrip php. Apakah ada tutorial untuk membuatnya?
useruseruser

Jawaban:

15

Ini adalah proses yang agak luas untuk melakukan ini, tetapi ini adalah versi yang dipangkas dari kode yang biasanya saya gunakan. Saya tidak akan selalu menjamin bahwa itu akan berjalan seperti yang ditunjukkan sejak saya merobek banyak hal internal yang kami lakukan di sepanjang jalan, tetapi ini adalah bagian-bagian yang perlu Anda lakukan.

Anda harus melihat tabel #__categoriesdan #__contentmendapatkan semua bidang yang ingin Anda isi dan menambahkannya ke array yang diberikan $category_datadan $article_data.

Saya harus menyebutkan bahwa Anda bisa menyelesaikannya dengan memasukkan catatan dengan jDatabase atau jTable, tetapi saya biasanya tidak merekomendasikan itu karena hal penting yang akan Anda lewatkan adalah aturan dan logika Joomla bawaan yang melakukan hal-hal seperti memeriksa keunikan. alias, dan mengelola ACL untuk item konten baru.

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;
    }
}
PDB
sumber
Joomla memang harus dimuat tentu saja, jadi jika Anda tidak melakukan dalam beberapa kode yang ada, Anda perlu memuatnya. Saya telah memperbarui jawaban saya untuk mencapai itu, jadi Anda baik untuk pergi.
GDP
Bukan untuk kode ini, ia menggunakan model Joomla untuk menambahkannya seperti yang dilakukan Joomla sendiri. Anda harus dapat memasukkan kode ini ke file php, lengkapi array $ data dengan bidang lain yang ingin Anda perbarui dan berhasil menjalankannya. Beri saya beberapa menit, dan saya akan memperbarui jawaban saya untuk memasukkan kode fungsional 100%.
GDP
Kode yang diperbarui sekarang membuat kategori dan artikel di dalamnya ketika dieksekusi apa adanya. FYI, jika Anda menentukan ID yang valid dan bukan 0 untuk keduanya, itu akan memperbarui kategori atau artikel itu alih-alih menambahkannya. Selain itu, aturan ACL adalah opsional ... Saya menyalin ini dari salah satu skrip saya yang menggunakan ACL, jadi itu sebabnya ada di sana, tetapi juga berguna untuk diketahui.
GDP
1
Saya hanya dapat menyarankan agar Anda merumuskan apa yang ingin Anda capai tanpa mengasumsikan bahwa templat atau MVC adalah bagian darinya. Plugin umumnya adalah cara terbaik untuk menyesuaikan apa yang dilakukan Joomla, tetapi kejelasan tentang apa yang ingin Anda lakukan adalah yang paling penting untuk menentukan apa solusi terbaik.
GDP
1
Solusi ini masih berfungsi dengan baik di Joomla! 3.9.11
AndyGaskell