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


11

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?

Risposte:


6

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

1

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

Sembra un buon punto di partenza per ottenere un articolo, ma devo aggiungere un articolo ...
Al Knight,

Scusa, ho frainteso
ContextSwitch il
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.