Tạo danh mục, danh mục con và bài viết bằng php


10

Có thể tự động tạo các danh mục, danh mục con và bài viết Joomla bằng các tập lệnh PHP không?

Có bất kỳ liên kết ví dụ?


2
Vâng, điều đó là có thể nhưng rất khó và tôi sẽ đề nghị chống lại nó trừ khi bạn cực kỳ quen thuộc với PHP vì đây com_contentlà phần mở rộng tích hợp phức tạp nhất trong Joomla. Bạn có thể muốn tiếp cận điều này theo một cách khác, có thể mở rộng một số chức năng hiện tại và viết lớp của riêng bạn
Lodder

@Lodder cảm ơn bạn đã trả lời. Thành thật mà nói tôi có kiến ​​thức về php và tôi sử dụng Joomla bằng giao diện phụ trợ. Những gì tôi muốn làm là có một trang web trong đó tôi đã thêm một số tính năng bằng bảng điều khiển quản trị Joomla (menu, trang, v.v.) và tôi muốn thực hiện các thay đổi nhỏ bằng cách sử dụng tập lệnh php. Có bất kỳ loại hướng dẫn để làm cho nó?
useruseruser

Câu trả lời:


15

Đây là một quá trình khá rộng rãi để làm điều này, nhưng đây là phiên bản rút gọn của mã mà tôi thường sử dụng. Tôi sẽ không nhất thiết đảm bảo rằng nó sẽ chạy như được hiển thị kể từ khi tôi lấy ra một loạt các nội dung mà chúng tôi làm trên đường đi, nhưng đây là những phần bạn cần để làm điều đó.

Bạn sẽ cần xem xét các bảng #__categories#__contentđể có được tất cả các trường bạn muốn điền và thêm chúng vào các mảng đã cho $category_data$article_datamảng.

Tôi nên đề cập rằng bạn có thể hoàn thành việc chèn các bản ghi bằng jDatabase hoặc jTable, nhưng tôi thường không khuyên bạn vì điều quan trọng mà bạn đang thiếu là các quy tắc và logic Joomla tích hợp thực hiện những việc như kiểm tra tính duy nhất của bí danh và quản lý ACL cho các mục nội dung mới.

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 tất nhiên phải được tải, vì vậy nếu bạn không thực hiện một số mã hiện có, bạn cần tải nó. Tôi đã cập nhật câu trả lời của mình để thực hiện điều đó, vì vậy bạn rất tốt để đi.
GDP

Không phải cho mã này, nó sử dụng các mô hình Joomla để thêm chúng giống như chính Joomla. Bạn sẽ có thể đặt mã này vào tệp php, hoàn thành mảng dữ liệu $ với các trường khác mà bạn muốn cập nhật và chạy thành công. Hãy cho tôi vài phút và tôi sẽ cập nhật câu trả lời của mình để bao gồm 100% mã chức năng.
GDP

Mã cập nhật bây giờ tạo ra một thể loại và một bài viết trong đó khi được thực thi. FYI, nếu bạn chỉ định ID hợp lệ thay vì 0 cho một trong hai, nó sẽ cập nhật danh mục hoặc bài viết đó thay vì thêm nó. Ngoài ra, các quy tắc ACL là tùy chọn ... Tôi đã sao chép điều này từ một trong các tập lệnh của tôi sử dụng ACL, vì vậy đó là lý do tại sao, nhưng cũng rất tiện để biết.
GDP

1
Tôi chỉ có thể đề nghị bạn xây dựng những gì bạn muốn thực hiện mà không cho rằng các mẫu hoặc MVC là một phần của nó. Plugin nói chung là cách tốt nhất để tùy chỉnh những gì Joomla làm, nhưng sự rõ ràng về những gì bạn muốn làm là quan trọng nhất để xác định giải pháp tốt nhất là gì.
GDP

1
Giải pháp này vẫn hoạt động tốt trong Joomla! 3.9.11
AndyGaskell

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.