Comment ajouter un article à #__content depuis mon composant?

11

Mon composant doit ajouter des articles du front-end de manière non conventionnelle. Je me rends compte que je peux simplement les insérer avec MySQL, mais j'aimerais utiliser les fonctions de base pour le faire (si c'est possible).

Après avoir étudié le code dans components \ com_content, je suis un peu dépassé par tout ce qui doit arriver et j'espérais que je le compliquais simplement.

Y a-t-il des exemples de cela dans Joomla, ou une convention d'étapes à suivre pour l'accomplir?

Al Knight
la source

Réponses:

6

Ouvrez le fichier modèle et ajoutez ces lignes à l'intérieur de la classe modèle:

public function getContentTable($type = 'Content', $prefix = 'JTable', $config = array())
{
    return JTable::getInstance($type, $prefix, $config);
}

Vous pouvez maintenant définir une méthode à l'intérieur de la classe de modèle pour ajouter un article. Quelque chose comme ça:

public function addArticle()
{
    $table = $this->getContentTable();
    $table->title = "Foo";
    $table->alias = "foo";
    // or
    // $table->alias = JApplication::stringURLSafe($table->title);
    $table->catid = 2;
    $table->state = 1;
    // and so on!
    // then save it
    $table->save();
}
Farahmand
la source
1

J'ai également dû charger des articles d'une manière non conventionnelle. J'ai pu exploiter une grande partie du code Joomla pour cela. Vous avez dû ajuster cela en fonction de vos besoins.

Cette fonction retournera un artlice avec un id (numérique) ou un alias.

    function loadArticle($id){

            $app = JFactory::getApplication();
            $db = JFactory::getDBO();
            $query = $db->getQuery(true);
            $selects = array('a.introtext','a.publish_up','a.publish_down');
            $query->select($selects);
            $query->from('#__content as a');

            // select the alias or id
            $where = 'a.title = ' . $db->q(NNText::html_entity_decoder($id));
            $where .= ' OR a.alias = ' . $db->q(NNText::html_entity_decoder($id));
            if (is_numeric($id)) {
                    $where .= ' OR a.id = ' . $id;
            }

            $query->where('(' . $where . ')');

            // check the publish and unpublish dates
            $now = JFactory::getDate('now','UTC');
            $nullDate = $db->getNullDate();

            $query->where('a.state = 1');

            $query->where('( a.publish_up = ' . $db->q($nullDate) . ' OR a.publish_up <= ' . $db->q($now) . ' )');
            $query->where('( a.publish_down = ' . $db->q($nullDate) . ' OR a.publish_down >= ' . $db->q($now) . ' )');

            $db->setQuery($query);
            $article = $db->loadObject();
            return $article;
    }
Changement de contexte
la source
Cela ressemble à un bon point de départ propre pour OBTENIR un article, mais je dois AJOUTER un article ...
Al Knight
Désolé, j'ai mal compris
ContextSwitch