[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
OOArticleSlice::getFirstSliceForArticle - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
howi_0205
Beiträge: 9
Registriert: 7. Jul 2011, 17:04

OOArticleSlice::getFirstSliceForArticle

2. Feb 2013, 22:39

Hallo zusammen.

Ich habe gerade einen Bug festgestellt den ich nicht beheben kann. Evtl kann mir jemand nen Tip geben wo ich einen Denkfehler habe.
Ich hole mir die ersten 3 Artikel aus einer bestimmten Seite (ID36) mit folgendem Code

Code: Alles auswählen

 if ($url != rex_getUrl(36))
                {
                  print '<section id="termin_area">';
                  print '<h1>Termine:</h1>';
                  
                    $slice = OOArticleSlice::getFirstSliceForArticle(36);
                    
                    
                    if ($slice != '')
                    {
                      print $slice->getSlice();
                    }
                    
                    $slice2 = $slice->getNextSlice();
                    if ($slice2 != '')
                    {
                      print $slice2->getSlice();
                    }
                    
                    $slice3 = $slice2->getNextSlice();
                    if ($slice3 != '')
                    {
                      print $slice3->getSlice();
                    }
                  
                  print '<a href="'.rex_getUrl(36).'" title="Termine">weitere Termine...</a>';
                  print '</section>';
                }
das funktioniert auch recht gut, jedoch wenn nur ein artikel als inhalt der seite verfügbar ist, wird nichts ausgegeben und das Problem versteh ich nicht. Jemand nen Tip? DANKE, Holger

Joachim.Dörr
Beiträge: 1403
Registriert: 7. Apr 2006, 01:49
Kontaktdaten: ICQ Website

Re: OOArticleSlice::getFirstSliceForArticle

10. Feb 2013, 01:15

Du brauchst eine Abfrage ob der nächste Slice dann auch als Objekt existiert, wenn nicht kann man ihn auch nicht anzeigen lassen, wenn man es doch versucht sollte das dann zum Error führen. http://php.net/manual/de/function.is-object.php

lg
Joachim
Doerr Softwaredevelopment | GitHub
Beati pauperes spiritu.

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: OOArticleSlice::getFirstSliceForArticle

10. Feb 2013, 09:46

Hej,

du könntest auch folgendes machen:

Code: Alles auswählen

<?php


// -------------------------------- alle Slices holen
$slices = OOArticleSlice::getSlicesForArticle(36);


// -------------------------------- Slices korrekt sortieren
$slice_ids     = array();
$slice_counter = array();
$c = 0;
foreach ($slices as $slice) {
  $slice_ids    [  $slice->_re_article_slice_id ] = $slice->getId();
  $slice_counter[  $slice->_re_article_slice_id ] = $c;
  
  $c++;
}

$_id         = 0;
$slices_sort = array();
foreach ($slices as $slice) {
  $slices_sort[] = $slices[$slice_counter[$_id]];

  $_id = $slice_ids[ $_id ]; 
}


// -------------------------------- auf 3 Slices beschraenken
$slices_out = array_slice($slices_sort, 0, 3);


// -------------------------------- Ausgabe der Slices
foreach ($slices_out as $slice) {
  echo $slice->getSlice();
}

?>
Vorteil wäre nur 1 Sql-Querie und nicht 3 Queries wie in deinem Code.


vg Thomas

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: OOArticleSlice::getFirstSliceForArticle

10. Feb 2013, 09:55

Habe es gleich mal als gist angelegt.

https://gist.github.com/tbaddade/4748841

howi_0205
Beiträge: 9
Registriert: 7. Jul 2011, 17:04

Re: OOArticleSlice::getFirstSliceForArticle

20. Feb 2013, 13:50

Hallo Thomas.

Vielen Dank für deine Hilfe.
Habe dein Script mal 1zu1 übernommen und diese Einstellungen vorgenommen:

Code: Alles auswählen

// -------------------------------- Einstellungen
                    $article_id = 36;     // Artikel Id
                    $clang = false;       // Sprachen Id --------- false = aktuelle Sprache
                    $ctype = 1;           // Ctype Id ------------ 0 = alle Ctypes
                    $slices_amount = 3;   // Anzahl der Slices --- 0 = alle Slices
Das Ergebnis ist unverändert. Ist nur ein Slice vorhanden wird nichts ausgegeben, bei 2 Slices werden beide ausgegeben.
Obwohl ich vier Slices gefüllt habe werden auch vier ausgegeben, obwohl ich doch

Code: Alles auswählen

$slices_amount = 3;   // Anzahl der Slices --- 0 = alle Slices
eingestellt habe.
Kann es sein das es daran liegt das ich die Redaxo Community verwende?

Vielen Dank
Holger

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: OOArticleSlice::getFirstSliceForArticle

20. Feb 2013, 15:08

Hej,

habe das gist aktualisiert.

https://gist.github.com/tbaddade/4748841

vg Thomas

howi_0205
Beiträge: 9
Registriert: 7. Jul 2011, 17:04

Re: OOArticleSlice::getFirstSliceForArticle

23. Feb 2013, 11:56

Hallo Thomas!

Vielen Dank!!! Funktioniert PRIMA!
WAs hast du daran noch geändert?

DANKE,
Gruß
Holger

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: OOArticleSlice::getFirstSliceForArticle

23. Feb 2013, 13:37

Hej,

wenn nur 1 slice gefunden wird, wird es gleich als Objekt und nicht als Array zurückgegeben.

Dieser Part ist wichtig.

Code: Alles auswählen

if (is_object($slices)) {
    echo $slices->getSlice();
} else {
vg Thomas

Zurück zu „Allgemeines [R4]“