web-dev-qa-db-fra.com

Comment ajouter un article à #__content à partir de mon composant?

Mon composant doit ajouter des articles à partir du front-end de manière non conventionnelle. Je réalise que je peux simplement les insérer avec MySQL, mais j'aimerais utiliser les fonctions principales pour le faire (si cela est possible).

Ayant étudié le code dans les composants\com_content, je suis un peu dépassé par tout ce qui doit se passer et espérais que je ne fais que trop compliquer les choses.

Existe-t-il des exemples de ceci dans Joomla ou une convention d’étapes à suivre pour le réaliser?

11
Al Knight

Ouvrez le fichier de modèle et ajoutez ces lignes dans la classe de 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 dans 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();
}
6
Farahmand

J'ai également dû charger des articles de manière non conventionnelle. J'ai pu exploiter beaucoup du code Joomla pour cela. Vous avez besoin d’adapter cela en fonction de vos besoins.

Cette fonction retournera un article donné avec un identifiant (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;
    }
1
ContextSwitch