mod_functions

Diskussion zu nicht so umfangreichen Modulen und Start-Up für neue Module. Ansonsten bitte die speziellen Kategorien benutzen!
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7205
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 920 Mal

mod_functions

Beitrag von MarkusR »

Ich fürchte, daß es mit ConPresso 4.1.x nicht so recht weitergeht, solange man mit Seitentemplates nicht wie mod_pages in 4.0.x auch problemlos PHP-Code einsetzen kann.

Natürlich kann man mit <!-- function: Name; Parameter...; --> auch vorher definierte Funktionen im Seitentemplate einbauen. Aber wenn ich schon mit einem externen Editor und FTP am Werkeln bin, dann schalte ich gewöhnlich das alte Header/Footer System wieder ein.
Insbesondere die Übergabe von Parametern an diese Funktionen ist zwar möglich, deren Verarbeitung dann aber aufwändiger als die Funktion selbst.

Also schieben wir 4.1.x mal ein wenig an: mod_functions

Hier kann man eine typische PHP-Funktion im System speichern, z.B.

Code: Alles auswählen

function FUNKTIONSNAME($argument1, $argument2 [,...] )  {
    //hier kommt nun der Beispiel-Code ...
    $ergebnis = $argument1 + $argument2;
    return $ergebnis;
}
Ganz wichtig ist dabei, daß die Argumente direkt(!) zu Verfügung stehen, also
$ergebnis = $argument1 + $argument2;
auch wirklich sofort eine Ausgabe erzeugt. Das ist von ConPresso so nicht vorgesehen.

Im Seitentemplate steht die Funktion dann als
<!-- function: FUNKTIONSNAME; argument1=WERT; argument2=WERT; -->
zur Verfügung, wird aber auch zusätzlich als PHP-Funktion FUNKTIONSNAME($argument1, $argument2) angelegt, und steht somit dann wieder in weiteren Funktionen zur Verfügung! Ganz wichtig, da in den Parametern natürlich/leider keine Funktionen verwendet werden können.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 02:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Wo kann ich das Plussen? :)
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7205
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 920 Mal

Beitrag von MarkusR »

Bei mir gibt es nichts zu "plussen" :wink:

Vor dem Erstellen eines Downloads will ich erst noch ein paar Funktionen als Beispiele erstellen (dazu muss ich erst mal meine ganzen Webseiten durchstöbern, was man da sinnvoll für jeden zur Verfügung stellen sollte, z.B. Login/Logout etc.) und ich muß noch drüber nachdenken, ob man dafür eine Hilfeseite braucht, weil es ja nur etwas für Leute ist, die PHP-Funktionen erstellen oder zumindest fehlerfrei abschreiben können. Alles andere sollte ja bekannt sein...

Brauchst Du eine Testversion?

Das Modul wird übrigens kostenlos und ohne Registrierung sein...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 02:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Momentan bin ich so mit Arbeit zu, dass ich das nicht zeitnah vernünftig testen kann.
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7205
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 920 Mal

Beitrag von MarkusR »

Das Funktionen-Modul zum Download (s.u.)

Ich habe jetzt folgende Funktionen als Beispiele dazugelegt:

Artikelzahl -> gibt dier Anzahl der online stehenden Artikel aus
LiveSearch -> zeigt die letzten Suchvorgänge auf der Webseite (kennt man ja von vielen Seiten)
Datum -> Gibt ein beliebiges oder das aktuelle Datum in der gewünschten Formatierung aus
Login -> Gibt ein "Sie sind nicht eingeloggt" bzw. "Sie sind als xyz eingeloggt" aus und bietet die Links zum ein- bzw. ausloggen

Das sollen ja nur Beispiele sein und es wäre schön, wenn hier einfach viele Funktionen gesammelt würden, die dann auch ins Modulsetup integriert werden könnten.

Und weil doch irgendwann einer fragen wird:
Das Modul ist (das erste) nur für ConPresso 4.1.x
Es lässt sich zwar auch unter 4.0.x installieren, ist dort aber nutzlos, weil es dort keine Seitentemplates und somit auch keine Seitentemplate-Funktionen gibt.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7205
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 920 Mal

Beitrag von MarkusR »

Hier ein neuer Vorschlag für eine Funktion zur Verwendung mit mod_functions:

Damit man, wie im Handbuch beschrieben, auch in einer 4.1.5 ein Login-Formular im Seitentemplate einbauen kann, habe ich folgende Funktion erstellt.

Code: Alles auswählen

function getToken($action) {
$antiCSRF = $GLOBALS['antiCSRF'];
$input = $antiCSRF->getInput($action);
return $input;
}
Mit <!-- function: getToken; action=dologin; --> kann ich nun ein Login-Formular in dieser Form erstellen:

Code: Alles auswählen

<h3><span>Login</span></h3>
        <div id="loginForm"><form action="../_rubric/member.php" method="post"><p><!-- function: getToken; action=dologin; --><input type="hidden" name="rubric" value="<!-- value: rubric; id; -->" />
        <input type="text" class="text" name="username" value="" /><br />
        <input type="password" class="text" name="password" value="" /> <input type="submit" class="button" name="login" value="Login" /><br />
        <a href="../_rubric/member.php?action=password_reset&rubric=1" class="red">Passwort vergessen?</a></p>
        </form></div>
<script type="text/javascript">
/* <![CDATA[ */ 
if (sessionuserid>0) document.getElementById("loginForm").innerHTML = '<form action="../_rubric/member.php" method="post"><!-- function: getToken; action=logout; --><input type="hidden" name="rubric" value="<!-- value: rubric; id; -->" />Sie sind eingeloggt als:<br /><b>'+sessionusername+'</b><br /><input type="submit" class="button" value="Ausloggen" /></form>'; 
/* ]]> */ 
</script>
Damit die JS-Umschaltung zwischen Login-Formular und "Sie sind eingeloggt als..." funktioniert, habe ich noch eine Funktion erstellt, die mir ein paar Session-Daten als JS-Variablen zur Verfügung stellt:

Code: Alles auswählen

function session() {
$script = '';
if ($_SESSION['SID_user']['id']) {
$script = "<script type=\"text/javascript\">
/* <![CDATA[ */
var sessionuserid=".$_SESSION['SID_user']['id'].";
var sessionusername=\"".$_SESSION['SID_user']['name']."\";
/* ]]> */ 
</script>";
}
return $script;
}
Das läss sich natürlich nach Belieben erweitern.

Zur Ausgabe wird im head-Tag die Funktion
<!-- function: session; -->
eingesetzt, die dann sowas ausgibt

Code: Alles auswählen

<script type="text/javascript">
/* <![CDATA[ */
var sessionuserid=1;
var sessionusername="Administrator";
/* ]]> */ 
</script>
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7205
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 920 Mal

Beitrag von MarkusR »

Neues von mod_functions!

1.) Die Funktionen lassen sich auch in Artikeltemplates und auch im Artikel selbst benutzen.
2.) für die Nutzung in Artikeln ist (neben der Schreibweise als Kommentar, um sie z.B. vor Redakteuren zu "verstecken") auch eine sichtbare Schreibweise in der Form
[!-- function: FUNKTIONSNAME; argument1=WERT; argument2=WERT; --]
möglich.
Dazu muß nur im Enhanced Parser noch die Zeile
mod_functions/post_parse_functions.inc.php
eingetragen werden.
Ohne Enhanced Parser ergänzt man den Parser am Ende um ein entsprechendes include.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 578
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 203 Mal
Danksagung erhalten: 19 Mal

Beitrag von hscha »

Hallo Markus,
ich habe die Modul-Version 4.2 gerade installiert (cpo 4.1.5). Leider kann ich keine eigenen Funktionen speichern. Der "Funktion speichern"-Button funxt nicht. Es wird nix in die Datenbank geschrieben.

Grüße von
Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7205
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 920 Mal

Beitrag von MarkusR »

3 Bedingungen werden vor dem Speichern geprüft:
1.) der Speichern-Button wurde gedrückt
2.) die Funktion hat einen Namen
3.) die Funktion hat einen Inhalt

Was steht bei Dir bei 2. und 3. ???
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 578
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 203 Mal
Danksagung erhalten: 19 Mal

Beitrag von hscha »

Hallo Markus,
es geht gar nichts, weder das Ändern einer vorhandenen vorinstallieren Funktion (z.B. "Datum") noch das Ergänzen einer neuen mit Inhalt und mit Namen.
Ich habe allerdings gerade festgestellt, dass es im MSIE funktioniert, nur Firefox spielt nicht mit!:roll:

Grüße von
Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7205
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 920 Mal

Beitrag von MarkusR »

Aaaah, FF ist mal wieder pingelig :wink:

Aber er hat recht, ich habe das INPUT-Tag nicht geschlossen.

Hier eine 4.2a, dort wurde nur die Datei edit.php geändert.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 578
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 203 Mal
Danksagung erhalten: 19 Mal

Beitrag von hscha »

Hallo Markus,

kann man eigentlich einer Funktion auch über ein Artikeltemplate Werte übergeben?
Ich habe folgendes vor:

Im Artikeltemplate steht:

Code: Alles auswählen

<!-- ifSet: benutzerLoginRubrik; --><!-- function: benutzerlogin; loginrubric=<!-- TEXT: benutzerLoginRubrik; -->; logintext=<!-- TEXT: loginText; -->; --><!-- /ifSet -->
Ich würde der Funktion "benutzerlogin" gern zwei Argumente übergeben: zum einen die Login-Rubrik, zum anderen einen Text, der über dem Login-Formular angezeigt werden soll.
Dies soll über das Artikeltemplate erfolgen mittels zweier durch den Redakteur editierbarer Felder.
Ist sowas machbar?

Grüße aus Berlin von
Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7205
Registriert: 01.01.1970 02:00
Hat sich bedankt: 104 Mal
Danksagung erhalten: 920 Mal

Beitrag von MarkusR »

Du hast es ja sicher getestet, oder?

Ich glaube nicht, daß es geht. Platzhalter ließen sich noch nie ineinander verschachteln.

Aber Du könntest das Post-Parsing ausprobieren:

[!-- function: benutzerlogin; loginrubric=<!-- TEXT: benutzerLoginRubrik; -->; logintext=<!-- TEXT: loginText; -->; --]
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 578
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 203 Mal
Danksagung erhalten: 19 Mal

Beitrag von hscha »

Hallo Markus!

Es funktioniert! Die Funktion wird ausgeführt und gibt die in den Platzhaltern angegebenen Werte aus!

Prima!!! Verschachteln geht in diesem Falle doch!

Daaaaaanke!
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 578
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 203 Mal
Danksagung erhalten: 19 Mal

Beitrag von hscha »

Diese Funktion gibt in Abhängigkeit vom Alter eines Artikels eine bestimmte Anzahl von Tagen ein "neu"-Bildchen aus, das vor der Überschrift eines Artikels ausgegeben werden kann:

Code: Alles auswählen

function artikelistneu ($anzahlNeuTage) {

/*                  	     \|/
---------------------------- o|o ----------------------------------
                              v
Diese Datei berechnet die Tage seit dem Veröffentlichungsdatum
eines Artikels und gibt für die ersten x Tage das gif "neu" aus. */

// tage, die ein artikel "neu" ist, festlegen:

if (empty($anzahlNeuTage)) $artikelfrisch = 7;
else $artikelfrisch = $anzahlNeuTage;

setlocale(LC_TIME,de_DE);

// Publikationsdatum des Artikels globalisieren und ermitteln:
global $db_pub_datum;
$publ = $db_pub_datum;

// string pub_datum - zeit abtrennen:
$pubdate = substr ($publ,0,10);

// string sortieren:
$ptag = substr ($pubdate,8,2);
$pmon = substr ($pubdate,5,2);
$pjahr = substr ($pubdate,0,4);
$pubdatesort = $ptag.'.'.$pmon.'.'.$pjahr;

// heutiges datum:
$jetztdate = date ("Y-m-d");

// Returns the Excel/Calc internal date integer from either an ISO date YYYY-MM-DD or MM/DD/YYYY formats:

$pubdate_xls = (25569 + (strtotime("$pubdate 12:00:00") / 86400));
$jetztdate_xls = (25569 + (strtotime("$jetztdate 12:00:00") / 86400));

// dank an http://www.php.net/manual/de!

$tagesdiff = $jetztdate_xls - $pubdate_xls;

// bilddatei-code ausgeben, wenn der artikel nicht älter als x tage ist (url an bildpfad anpassen):
if ($tagesdiff < $artikelfrisch){
	$bild = '<img src="../../bilder/neu.gif" style="border:0; margin: 0 8px -5px 0;" alt="neu" title="artikel vom '.$pubdatesort.'" />';
}
else {
	$bild = '';
}
return $bild;
}
Die Bild-URL muss angepasst werden. Wenn man nach obigem Vorbild die Funktion mit

Code: Alles auswählen

[!-- function: artikelistneu; anzahlNeuTage=<!-- TEXT: artikelNeu; -->; --]
in einem Artikeltemplate einbaut, dann kann der Redakteur die Anzahl der Tage selbst bestimmen...

Grüße von
Horst