Wie füge ich einen Artikel aus meiner Komponente zu #__content hinzu?

11

Meine Komponente muss Artikel aus dem Front-End auf unkonventionelle Weise hinzufügen. Mir ist klar, dass ich sie einfach mit MySQL einfügen kann, aber ich möchte dazu die Kernfunktionen verwenden (wenn es möglich ist).

Nachdem ich den Code in components \ com_content studiert habe, bin ich ein wenig überwältigt von allem, was passieren muss, und hatte gehofft, dass ich ihn nur überkompliziere.

Gibt es Beispiele dafür in Joomla oder eine Konvention von Schritten, die befolgt werden müssen, um dies zu erreichen?

Al Knight
quelle

Antworten:

6

Öffnen Sie die Modelldatei und fügen Sie diese Zeilen in die Modellklasse ein:

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

Jetzt können Sie innerhalb der Modellklasse eine Methode definieren, um einen Artikel hinzuzufügen. Etwas wie das:

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
quelle
1

Ich musste auch Artikel auf unkonventionelle Weise laden. Ich konnte einen Großteil des Joomla-Codes dafür nutzen. Sie mussten dies an Ihre Bedürfnisse anpassen.

Diese Funktion gibt eine Artlice mit einer ID (numerisch) oder einem Alias ​​zurück.

    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;
    }
ContextSwitch
quelle
Dies sieht aus wie ein guter sauberer Ausgangspunkt, um einen Artikel zu erhalten, aber ich muss einen Artikel hinzufügen ...
Al Knight
Entschuldigung, ich habe falsch verstanden
ContextSwitch