สร้างหมวดหมู่หมวดหมู่ย่อยและบทความโดยใช้ PHP


10

เป็นไปได้ไหมที่จะสร้างหมวดหมู่ Joomla หมวดหมู่ย่อยและบทความแบบไดนามิกโดยใช้สคริปต์ PHP?

มีลิงค์ตัวอย่างหรือไม่?


2
ใช่มันเป็นไปได้ แต่ยากมากและฉันขอแนะนำให้คุณเว้นเสียแต่ว่าคุณจะคุ้นเคยกับ PHP เป็นอย่างดีเนื่องจากcom_contentเป็นส่วนเสริมในตัวที่ซับซ้อนที่สุดใน Joomla คุณอาจต้องการใช้วิธีนี้ในวิธีที่แตกต่างออกไปซึ่งเป็นไปได้ที่จะขยายฟังก์ชันการทำงานปัจจุบันและเขียนคลาสของคุณเอง
Lodder

@Lodder ขอบคุณสำหรับคำตอบของคุณ บอกตามตรงฉันมีความรู้เกี่ยวกับ PHP และฉันใช้ Joomla โดยใช้ส่วนต่อประสานแบ็กเอนด์ สิ่งที่ฉันต้องการทำคือมีเว็บไซต์ที่ฉันเพิ่มคุณสมบัติบางอย่างโดยใช้ Joomla admin console (เมนู, หน้า, ฯลฯ ) และฉันต้องการเปลี่ยนแปลงเล็กน้อยโดยใช้สคริปต์ PHP มีการสอนแบบใดที่จะทำหรือไม่
useruseruser

คำตอบ:


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

ตอนนี้โค้ดที่อัปเดตจะสร้างหมวดหมู่และบทความภายในเมื่อดำเนินการตามที่เป็นอยู่ FYI หากคุณระบุ ID ที่ถูกต้องแทนที่จะเป็น 0 จะเป็นการอัปเดตหมวดหมู่หรือบทความนั้นแทนการเพิ่ม นอกจากนี้กฎ ACL ก็เป็นทางเลือก ... ฉันคัดลอกสิ่งนี้จากหนึ่งในสคริปต์ของฉันที่ใช้ ACL นั่นคือสาเหตุที่มี แต่มีประโยชน์ที่จะรู้เช่นกัน
GDP

1
ฉันสามารถแนะนำให้คุณกำหนดสิ่งที่คุณต้องการให้สำเร็จโดยไม่คิดว่าแม่แบบหรือ MVC เป็นส่วนหนึ่งของมัน โดยทั่วไปปลั๊กอินเป็นวิธีที่ดีที่สุดในการปรับแต่งสิ่งที่ Joomla ทำ แต่ความชัดเจนของสิ่งที่คุณต้องการทำมีความสำคัญที่สุดในการพิจารณาว่าทางออกที่ดีที่สุดคืออะไร
GDP

1
โซลูชันนี้ยังทำงานได้ดีใน Joomla! 3.9.11
AndyGaskell

3

มีอย่างน้อยหนึ่งนามสกุล "OSContent" ในไดเรกทอรีของ Joomla Extensions ที่คุณสามารถใช้เป็นตัวอย่างได้:

http://extensions.joomla.org/extensions/miscellaneous/mass-content/18000

OSContent ช่วยให้คุณสร้างบทความและหมวดหมู่เป็นกลุ่ม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.