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?

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.