Crea categorie, sottocategorie e articoli usando php


10

È possibile creare dinamicamente categorie, sottocategorie e articoli Joomla usando gli script PHP?

C'è qualche link di esempio?


2
Sì, è possibile ma molto difficile e lo suggerirei a meno che tu non abbia familiarità con PHP poiché com_contentè l'estensione integrata più complessa in Joomla. Potresti voler affrontare questo in un modo diverso, possibile estendere alcune delle funzionalità attuali e scrivere la tua classe
Lodder

@Lodder grazie per la tua risposta. Ad essere sincero, conosco php e utilizzo Joomla usando l'interfaccia back-end. Quello che voglio fare è avere un sito in cui ho aggiunto alcune funzionalità usando la console di amministrazione di Joomla (menu, pagine, ecc.) E voglio fare piccole modifiche usando gli script php. C'è qualche tipo di tutorial per farlo?
useruseruser

Risposte:


15

È un processo piuttosto esteso per fare questo, ma ecco una versione ridotta del codice che generalmente utilizzo. Non garantirò necessariamente che funzionerà come mostrato da quando ho strappato un sacco di cose interne che facciamo lungo la strada, ma questi sono i pezzi che ti servono per farlo.

Dovrai guardare le tabelle #__categoriese #__contentottenere tutti i campi che vuoi popolare e aggiungerli al dato $category_datae agli $article_dataarray.

Devo dire che si poteva realizzarlo inserendo i record con JDatabase o JTable, ma io non sarei in genere consigliamo perché la cosa importante che si sarebbe manca è il built-in regole Joomla e logiche che fanno cose come controllare l'unicità dell'alias e gestione dell'ACL per i nuovi elementi di contenuto.

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;
    }
}

Naturalmente Joomla deve essere caricato, quindi se non stai eseguendo un codice esistente, devi caricarlo. Ho aggiornato la mia risposta per riuscirci, quindi sei a posto.
PIL,

Non per questo codice, utilizza i modelli Joomla per aggiungerli proprio come fa Joomla. Dovresti essere in grado di inserire questo codice in un file php, completare l'array $ data con altri campi che desideri aggiornare ed eseguirlo correttamente. Dammi qualche minuto e aggiornerò la mia risposta per includere il codice funzionale al 100%.
PIL,

Il codice aggiornato ora crea una categoria e un articolo al suo interno quando eseguito così com'è. Cordiali saluti, se si specifica un ID valido anziché 0 per entrambi, aggiornerà quella categoria o articolo invece di aggiungerlo. Inoltre, le regole ACL sono opzionali ... Ho copiato questo da uno dei miei script che utilizza ACL, quindi è per questo che è lì, ma è anche utile saperlo.
PIL,

1
Posso solo suggerire di formulare ciò che si desidera realizzare senza supporre che i modelli o MVC ne facciano parte. I plugin sono generalmente il modo migliore per personalizzare ciò che fa Joomla, ma la chiarezza di ciò che vuoi fare è molto importante per determinare qual è la soluzione migliore.
PIL il

1
Questa soluzione funziona ancora bene in Joomla! 3.9.11
AndyGaskell,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.