Modul: Halbautomatischer Artikel-Seitenwechsel 4.6.x

kptkip
Beiträge: 192
Registriert: Mi 8. Jun 2005, 18:02
Kontaktdaten:

Beitrag von kptkip » Do 29. Jun 2006, 10:44

[Edit HerrB: Diese Änderung kann Probleme verursachen. Siehe http://www.contenido.org/forum/viewtopi ... 2414#92414]

Hallo, ich habe zum gleichen THema auch noch ein Output produziert, das ebenfalls den kompletten Artikel im Editor anzeigt.
Zusätzliches Feature:

- An den Seitenumbruchstellen wird eine Marke im Editor eingefügt, die dem Redakteur den Seitenumbruch anzeigt.

- die Paginierung wird in einem DIV-Container angezeigt und mit einer CLASS versehen, sodass man CSS zur Formatierung verwenden kann.

Ich habe es zwar noch nicht mit NICHT-Ankern ausprobiert, sollte für meinen Geschmack allerdings gehen.

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname  :    Article Semi-AutoPageBreak
* Author(s)  :    Stefan Seifarth <info@polycoder.de>
* Copyright  :    www.polycoder.de / www.htcm.de
* Created    :    2006-06-17
************************************************/ 

// include pagebreak class
cInclude("frontend", "includes/class.articlepagebreak.php");

$strAnchorName = "CMS_VALUE[210]";
$strArticle     = "CMS_HTML[1]";
$strDelimiter = '<a name="' . $strAnchorName . '"></a>';

// initialize class 
// parameter delimiter for article spliting
$oArticlePageBreak = new ArticlePageBreak( $strDelimiter );

// set article
$oArticlePageBreak->setArticle( $strArticle );

// set current page for output
$intCurrentPage = 0;
if ( isset($_REQUEST[$oArticlePageBreak->strPageParameter]) && !empty($_REQUEST[$oArticlePageBreak->strPageParameter]) && (int)$_REQUEST[$oArticlePageBreak->strPageParameter] > 0 ) {
    $intCurrentPage = (int)$_REQUEST[$oArticlePageBreak->strPageParameter];
}
$oArticlePageBreak->setCurrentPage($intCurrentPage);

// set Textlinks
$oArticlePageBreak->setTextFirstPage( mi18n("Erste Seite") );
$oArticlePageBreak->setTextPreviousPage( mi18n("Vorhergehende Seite") );
$oArticlePageBreak->setTextNextPage( mi18n("Nächste Seite") );
$oArticlePageBreak->setTextLastPage( mi18n("Letzte Seite") );
$oArticlePageBreak->setTextPreviousRange( mi18n("Zurück") );
$oArticlePageBreak->setTextNextRange( mi18n("Weiter") );
$oArticlePageBreak->setTextPageTitle( mi18n("Gehe zu Seite ") );


// output the current article part
if ($edit && empty($_REQUEST['edit'])) {        // Edit-Mode
  if ( preg_match("/^<([^>]*)>/i", $strDelimiter, $arrTagInlay) ) {
     $bolDelimiterIsTag = $arrTagInlay[1];
  }
  if ( $bolDelimiterIsTag && strlen($bolDelimiterIsTag) > 0 ) {
     $strReplacePattern = '';
     $arrTagParts = explode(" ", $bolDelimiterIsTag);
     if (is_array($arrTagParts)) {
        $arrTagParts = array_filter($arrTagParts);
        $strReplacePattern = '/<' . implode("[^>]*", $arrTagParts) . '[^>]*>/i';
		$strArticle = preg_replace($strReplacePattern,"<div style=\"border:1px dashed #900; color:#a22; text-align:center; padding:0px;\" title=\"An dieser Stelle wird die Seite in bl&auml;tterbare Folgeseiten getrennt. Siehe Vorschau!\">< -- Seitenumbruch -- ></div>",$strArticle);
     }
  }
  else{
    $strArticle = preg_replace($strDelimiter,"<div style=\"border:1px dashed #900; color:#a22; text-align:center; padding:0px;\" title=\"An dieser Stelle wird die Seite in bl&auml;tterbare Folgeseiten getrennt. Siehe Vorschau!\">< -- Seitenumbruch -- ></div>",$strArticle);  
  }
  echo $strArticle;
}

else{                                          // Publish-Mode
  print $oArticlePageBreak->getArticle();

  // get pagination for article
  print "<div class=\"articlePagination\">".$oArticlePageBreak->getPagination()."</div>";
}



/*
// xml output

// add custom xml tags
// (class xmlObject is located in class.articlepagebreak.php)
// 
$oHeadline = new xmlObject(
  "headline", // tag name
  "",  // attributes (given as array)
  "headlinetext",  // content of element
  true  // usage of cdata for content
);
// store the above configured tag into class
$oArticlePageBreak->setXMLAdditionalContentTag($oHeadline);

// output complete xml
print $oArticlePageBreak->getXMLComplete();
*/
?>

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Do 29. Jun 2006, 11:36

das mit der vorschau ist ne gute idee ...

DEDE
Beiträge: 314
Registriert: Do 19. Feb 2004, 16:15
Kontaktdaten:

Bei mir macht es was komsches

Beitrag von DEDE » Mo 9. Okt 2006, 13:10

Hallo und Servus,

bei mir tuts nicht so ganz.

Der Artikel wird dort, wo er geteilt werden soll, nicht geteilt, sondern ZUSÄTZLICH noch einmal ans Ende der Artikles angehängt.

Witzig, was? Wat soll ich tun?

http://www.networkingdinner.com/cms/fro ... 102&page=1

Grüsse und Daaaank

Dede

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Mo 9. Okt 2006, 14:37

scheint so, als ob du a) den modulinput nicht korrekt gesetzt hast (artikel-templatekonfiguration) und b) vll. irgendwas mit dem $edit nicht stimmt im output modul. wie schauts denn im backend aus? kommt da nur 1x der text?

DEDE
Beiträge: 314
Registriert: Do 19. Feb 2004, 16:15
Kontaktdaten:

...

Beitrag von DEDE » Mo 9. Okt 2006, 21:03

Hallo stese,

also ich nannte es in der TemplateKonfiguration "anker" und ebenso im Artikel.
Nimmt man den Anker raus oder benennt ihn falsch, wiederholt sich der komplette Text nach den Formularfeldern.

Aua.

:?:

Dede

ThomasH
Beiträge: 32
Registriert: Mo 20. Nov 2006, 21:53
Kontaktdaten:

Beitrag von ThomasH » Do 30. Nov 2006, 10:45

---gelöst!---
Hallo,
ich bin leider alleine nicht fähig, das Modul zum Laufen zu bringen. Außerdem möchte ich für meine DAUs nicht mit Ankern, sondern mit einem Text {Seitenwechsel} arbeiten.

Ich habe einen laaangen Artikel in HTML[1] als Startartikel der Kategorie, die Klasse in cms/includes abgelegt, das Modul von polycoder importiert, in das Template der Kategorie eingebunden, {Seitenwechsel} im Backend angegeben und das Modul wie folgt geändert:

Code: Alles auswählen

// include pagebreak class
cInclude("frontend", "includes/class.articlepagebreak.php");

$strAnchorName = "CMS_VALUE[210]";
$strArticle 	= "CMS_HTML[1]";
#$strDelimiter = '<a name="' . $strAnchorName . '"></a>';
$strDelimiter = "CMS_VALUE[210]";
Leider tut sich gar nichts. Der Text erscheint wie angegeben im Frontent. Was mache ich falsch?

Danke für alle Hinweise im Voraus
Thomas
Zuletzt geändert von ThomasH am Do 30. Nov 2006, 11:02, insgesamt 1-mal geändert.

ThomasH
Beiträge: 32
Registriert: Mo 20. Nov 2006, 21:53
Kontaktdaten:

Beitrag von ThomasH » Do 30. Nov 2006, 11:01

Also, ich bin wirklich Anfänger, naja:
Ich hatte für die Kategorie noch ein Standard-Template konfiguriert, sorry. Das Modul läuft trotzdem noch nicht.

Hab auch den anderen Output von kptkip getestet. Bei beiden Modulen gleiches Ergebnis: Es erscheint im Backend nur noch die erste Pseudo-Seite, so dass ich den Text nicht mehr editieren kann (nutze den Editor) und im Frontend klappt die Navigation nicht, weil contenido in den edit-Modus gehen will. Außerdem werden im FE und BE die Texte doppelt angezeigt.

Den Text habe ich in einen Container (HTML 1) kopiert, das Modul steht in einem zweiten Container. Was habe ich falsch verstanden?

http://schwestern-undbruederschaft.de/c ... ?idcat=102


Gruß
Thomas

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Do 30. Nov 2006, 17:44

poste mir mal bitte per pm die zugangsdaten zum backend von contenido .. dann kann ich es mir mal anschauen ... normal sollten die links keine $contenido variable im frontend enthalten. die ist nur für das backend da

stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese » Do 30. Nov 2006, 22:07

gelöst.

bitte nicht die erweiterung von kptkip nutzen. diese funktioniert tatsächlich nur in einigen sehr wenigen fällen.

- bitte nur das original modul aus dem ersten post nutzen (wurde von mir ständig aktualisiert).

- des weiteren verhält sich das modul im backend wie ein stinknormales HTML Text Modul. Es wird also im Backend NICHT auf mehrere seiten gesplittet, da dies durch das inline edit von contenido bewirken würde, dass der artikel um alle seiten nach der ersten seite gnadenlos gelöscht würde.

- Da sich das Modul wie ein HTML Text Modul verhält, braucht KEIN weiteres HTML Text Modul in dem Template definiert werden. Ein weiteres Modul wird nur dann benötigt, wenn IMMER vor jeder einzelnen Seite der identische Text stehen soll.

ThomasH
Beiträge: 32
Registriert: Mo 20. Nov 2006, 21:53
Kontaktdaten:

Beitrag von ThomasH » Sa 2. Dez 2006, 21:09

Lieber Stese, Vielen Dank für die Hilfe! Jetzt funktioniert es und ich werde noch ein wenig am css feilen und mal probehalber ModRewrite einschalten.

Gruß
Thomas

ClemensSchnitzler
Beiträge: 137
Registriert: Di 17. Aug 2004, 12:32
Kontaktdaten:

Code ist nicht Valide

Beitrag von ClemensSchnitzler » Di 9. Okt 2007, 11:50

Das Modul funktioniert soweit richtig. Ich habe aber Probleme mit der Erzeugung von validem Code.

Wenn ich nun einen Anker zum splitten der Seiten eingebaut habe wird auf der zweiten Seite ein Code generiert indem für den Inhalt das div oder der span gesetzt wird. Dann kommt ein schliessendes </a> nach welchem dann direkt der Text folgt.

Dieses </a> wird vom W3C Validator als falsch markiert.

Ich habe hier im Forum gesucht, aber leider nichts zu diesem Punkt gefunden. Probiert habe ich auch schon einiges, aber diese Versuche führten alle ins Leere.

Vielleicht kann mir jemand bei der Lösung des Problems behilflich sein.

Grüße

Clemens

media-konzept
Beiträge: 90
Registriert: So 20. Mär 2005, 13:24
Wohnort: CH-5430 Wettingen
Kontaktdaten:

Code ist nicht Valide

Beitrag von media-konzept » Do 20. Dez 2007, 14:28

Ich hatte das gleiche Problem auch (</a>) ab der 2. Seite.

Meine Lösung:
In der Datei class.articlepagebreak_neu.php zeile 116 ersetzt durch:

Code: Alles auswählen

$strReplacePattern = '/<' . implode("[^>]*", $arrTagParts) . '[^>]*>[<\/(a-zA-Z)*>]*/i';
Ich weiss nicht, ob dies allen Anforderungen genügt, bin auch nicht umbedingt ein Regex-Profi, aber das </a> ist jetzt nicht mehr im Ausgabecode.


Gruss Walti
two beers or not two beers

Marvin1987
Beiträge: 2
Registriert: Di 29. Jan 2008, 20:48
Kontaktdaten:

Beitrag von Marvin1987 » Di 29. Jan 2008, 21:12

hallo!

ich habe auch ein problem mit dem modul. eigentlich glaube ich ja, ich bin nur zu dumm es richtig zu verwenden.

also ich habe die datei: class.articlepagebreak.php in cms/includes/ abgelegt.
dann habe ich ein neues Modul angelegt, mit dem namen: Article Semi-AutoPageBreak und die codes reinkopiert.

im template habe ich dann das modul (text html) mit "Article Semi-AutoPageBreak" ausgewechselt.

ich bekomme keine fehlermeldungen, nur wie funktioniert das jetzt mit dem anker?

wenn ich jetzt bei artikel/konfiguration bei "Ankername für Seitenwechsel:" ANKER eingebe und diesen dann im texteditor eintrage, passiert bei mir gar nichts.

habe ich etwas nicht verstanden oder funktioniert es bei mir technisch nicht?

ich hoffe, mir kann jemand helfen!

mit lieben grüßen

marvin

ThomasH
Beiträge: 32
Registriert: Mo 20. Nov 2006, 21:53
Kontaktdaten:

Beitrag von ThomasH » Di 29. Jan 2008, 21:50

mal ne dumme FRage: Hast Du {ANKER} geschrieben oder ANKER?

Gruß
Thomas

Marvin1987
Beiträge: 2
Registriert: Di 29. Jan 2008, 20:48
Kontaktdaten:

Beitrag von Marvin1987 » Mi 30. Jan 2008, 08:31

ähm, nein. was muss ich denn wo schreiben? :oops:

lg marvin

Gesperrt