it-swarm-eu.dev

Come faccio ad aggiungere un articolo a #__content dal mio componente?

Il mio componente deve aggiungere articoli dal front-end in modo non convenzionale. Mi rendo conto che posso semplicemente inserirli con MySQL, ma mi piacerebbe usare le funzioni principali per farlo (se possibile).

Dopo aver studiato il codice in componenti\com_content, sono un po 'sopraffatto da tutto ciò che deve accadere e spero che lo stia solo complicando troppo.

Ci sono esempi di ciò in Joomla o una convenzione di passi da seguire per realizzarlo?

11
Al Knight

Apri il file del modello e aggiungi queste righe all'interno della classe del modello:

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

Ora puoi definire un metodo all'interno della classe del modello per aggiungere un articolo. Qualcosa come questo:

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

Ho anche dovuto caricare articoli in modo non convenzionale. Sono stato in grado di sfruttare molto del codice Joomla per questo. Hai reso necessario adeguarlo in base alle tue esigenze.

Questa funzione restituirà un oggetto dato un ID (numerico) o 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