PHP를 사용하여 카테고리, 하위 카테고리 및 기사 만들기


10

PHP 스크립트를 사용하여 Joomla 카테고리, 하위 카테고리 및 기사를 동적으로 작성할 수 있습니까?

예제 링크가 있습니까?


2
그렇습니다. 가능하지만 매우 어렵습니다 com_content. Joomla에서 가장 복잡한 내장 확장 기능인 PHP에 대해 잘 알고 있지 않는 한 이에 반대하는 것이 좋습니다 . 다른 방식으로 접근하여 현재 기능의 일부를 확장하고 자신 만의 클래스를 작성할 수 있습니다.
Lodder

@Lodder 귀하의 답변에 감사드립니다. 솔직히 PHP에 대한 지식이 있고 백엔드 인터페이스를 사용하여 Joomla를 사용합니다. 내가 만들고 싶은 것은 Joomla 관리 콘솔 (메뉴, 페이지 등)을 사용하여 일부 기능을 추가 한 사이트를 가지고 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

업데이트 된 코드는 이제 그대로 실행될 때 카테고리 및 기사를 작성합니다. 참고로, ID 대신 0 대신 유효한 ID를 지정하면 해당 카테고리 또는 기사를 추가하지 않고 업데이트합니다. 또한 ACL 규칙은 선택 사항입니다 ... ACL을 사용하는 스크립트 중 하나에서 이것을 복사 했으므로 그 이유가 있지만 잘 아는 것이 편리합니다.
GDP

1
템플릿이나 MVC가 그 일부라고 가정하지 않고 달성하고자하는 것을 공식화 할 것을 제안 할 수 있습니다. 플러그인은 일반적으로 Joomla가 수행하는 작업을 사용자 정의하는 가장 좋은 방법이지만 최상의 솔루션이 무엇인지 확인하려면 수행하려는 작업의 명확성이 가장 중요합니다.
GDP

1
이 솔루션은 여전히 ​​Joomla에서 잘 작동합니다! 3.9.11
AndyGaskell

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.