newsmanager icon indicating copy to clipboard operation
newsmanager copied to clipboard

Verwendung der Newsausgabe in einem Modul ermöglichen

Open skerbis opened this issue 7 years ago • 12 comments

Das aktuelle Beispiel setzt die Verwendung in einem Template voraus.

skerbis avatar Oct 20 '17 12:10 skerbis

um noch einen draufzusetzen, am besten Modul gleich mit der Installation anlegen

javanita avatar Oct 20 '17 14:10 javanita

Naja, der Grund für das Template ist eigentlich der Header Bereich. Ich habe ja in der Listen- und der Singleansicht verschiedene Meta Tags. D.h. da hilft mir ein Modul schon nicht weiter. Aber es spricht nichts dagegen, die beschriebene Ausgabe über ein Modul zu machen - dachte das erklärt sich eh von selbst ;) - Ich überlege mal, vielleicht kann man in der Einstellungsseite eine Modulinstallation einbauen...

georgkaser avatar Oct 20 '17 14:10 georgkaser

Vielleicht falsch formuliert. Das Beispiel sollte Modul-Code zeigen.

skerbis avatar Oct 20 '17 15:10 skerbis

hallo georg, ich würde gerne eine übersicht der news über ein modul ausgeben. wenn ich aber diesen code (der ja über ein template ausgegeben funktioniert) in ein modul setze bekomme ich den error 'Call to a member function printListView() on null'

if ($news_id) {            // Artikel-Ansicht (kann hier ja entfallen)
            echo $newsmanager->printSingleView($article_post);
        } else {
            // Listenansicht
            echo $newsmanager->printListView(null, $this->getValue('article_id'), 3);
        }

hast du einen tipp für mich? danke!

ansichtsache avatar Mar 02 '18 12:03 ansichtsache

Hast du ein Objekt erzeugt? $newsmanager = NewsManager::create();

georgkaser avatar Mar 02 '18 12:03 georgkaser

sorry, dann schmeißt er mir "Call to undefined method NewsManager::create()"

Am 02.03.2018- KW 09 um 13:19 schrieb Georg Kaser [email protected]:

$newsmanager = NewsManager::create();

ansichtsache avatar Mar 02 '18 12:03 ansichtsache

Okay, das geht erst bei der Github Version. Es geht auch so: $newsmanager = new NewsManager(); oder wenn du auch die Kommentare haben möchtest, dann $newsmanager = new NewsManagerWithComments();

georgkaser avatar Mar 02 '18 14:03 georgkaser

$newsmanager = new NewsManager();

der war es. danke!

dann schreibe ich mir mal noch einen view der nur die headline und die subhead verlinkt ausgibt.

Am 02.03.2018- KW 09 um 15:32 schrieb Georg Kaser [email protected]:

Okay, das geht erst bei der Github Version. Es geht auch so: $newsmanager = new NewsManager(); oder wenn du auch die Kommentare haben möchtest, dann $newsmanager = new NewsManagerWithComments();

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

ansichtsache avatar Mar 02 '18 14:03 ansichtsache

hallo georg, wenn du mir noch mal weiterhelfen könntest? ich habe im NewsManager.php folgende funktion ergänzt:

/**
     * Generates a list view of the articles from a template (article-teaser-list-view.php)
     * @param NewsManagerArticle $newsArticle Article object
     * @return string markup of the article teaser list view
     */
    public function printTeaserListView($singleViewArticleId, $limit = 0)
    {
        $TeaserlistView_output = '';
        $teasernewslist = '';
        $suggestions = array('article-teaser-list-view');
        $posts = $this->getArticleObjectList($limit);
        foreach ($posts as $post) {
            if ($post instanceof NewsManagerArticle) {
                $teasernewslist .= $post->printArticleTeaserList($post, $newsArticle);
            }
        }
        $TeaserlistView_output .= $this->tpl->render($suggestions, array(
                     'teasernewslist' => $teasernewslist
            ));
        return '<ul>'.$TeaserlistView_output.'</ul>';
}

und im NewsManagerArticle.php diese:

public function printArticleTeaserList($post, $newsArticle)
    {
        $output = '';
        $suggestions = array('article-teaser-list');
        $output .= $this->tpl->render($suggestions, array(
            'title' => $post->getTitle(),
           'subtitle' => $this->getSubtitle(), 
            'url' => $this->getUrl()
                ));
        return $output;
    }

noch ein view article-teaser-list.php:

            <li><a href="<?=$url?>"><strong><?=$title?></strong></a><br />
             <?=$subtitle?></li>

und das ganze mit einem modul ausgeben:

<?php
// Ausgabe der Newsartikel
$newsmanager = '';
$newsmanager = new NewsManager();
// Listenansicht
echo $newsmanager->printTeaserListView(null, $this->getValue('article_id'), 2);
?>

das klappt soweit, nur das ich zwei hürden habe:

  1. das modul gibt auf meiner startseite eingebunden nur die letzte news aus, auf einer anderen seite werden alle online-news ausgegeben
  2. eine limitierung greift nicht. ich würde aber gerne bei einsatz des moduls immer die letzten 2 oder 3 news augeben. hast du noch einen tipp? danke und gruß tizian

ansichtsache avatar Mar 05 '18 11:03 ansichtsache

hmm, was mir aufgefallen ist: Du gibst bei deiner Ausgabe im Modul 3 Parameter an - bei deiner Funktionsdefinition sinds aber nur 2. Kann das richtig sein?

georgkaser avatar Mar 05 '18 11:03 georgkaser

danke! das kommt von gefährlichem halbwissen … mit dieser modulausgabe geht es:

<?php
// Ausgabe der Newsartikel
$newsmanager = '';
$newsmanager = new NewsManager();
// Listenansicht
echo $newsmanager->printTeaserListView($this->getValue('article_id'), 3);
?>

soll ich die ergänzungen in pullrequests verarbeiten?

ansichtsache avatar Mar 05 '18 12:03 ansichtsache

Super! Ja, gerne. Ich werde die dann (hoffentlich bald) einfließen lassen. Ein bisserl Geduld brauchts aber noch ;) Danke dir!

georgkaser avatar Mar 05 '18 12:03 georgkaser