neue Seitentemplate-Funktion anlegen

Hier bitte Probleme zu ConPressoPlus melden. Hier werden Ursachen und Lösungsvorschläge diskutiert.
Bugs in Modulen in den entsprechenden Foren melden und diskutieren!
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 849
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

neue Seitentemplate-Funktion anlegen

Beitrag von hscha »

Lieber Markus,
zurzeit gelingt es mir nicht, eine neue Seitentemplate-Funktion zu speichern. Erfolgreich ist nur der Umweg über das Anlegen eines neuen Datensatzes in der Tabelle ..._mod_functions. Dann kann man Änderungen in der neu angelegten Funktion auch speichern. Eine php-Fehlermeldung wird nicht ausgegeben.
Grüße von Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7552
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von MarkusR »

Habe es gerade getestet mit einer einfachen Funktion und keine Probleme bemerkt.
Willst Du ausführlicher werden?

Zur Info: Da der wie auch immer geartete selbst geschriebene Code unmittelbar zur Ausführung gelangt, kann dieser sämtliche CPO-Funktionen blockieren. Man sollte also recht sicher sein, dass der Code funktioniert.
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: 849
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von hscha »

Eigentlich sollte auch eine Message ausgegeben werden, was ebenfalls nicht erfolgt.
Ich habe folgenden Code in mod_functions/actions.inc.php gefunden:

Code: Alles auswählen

= Version: 4.2b / January 2013 ==

*/

// save
if (isset($_POST['action']) && $_POST['action']=='save' && $_POST['function_name']!='' && $_POST['function_code']!='') {
	$query = "REPLACE INTO ".$dbPrefix."_mod_functions values ('".$_POST['function_name']."','".$_POST['function_args']."','".addslashes($_POST['function_code'])."') ";
	DEBUG(2, $query, __FILE__, __LINE__);  
	$db = new DB;
	$db->query($query);
	$message[] = sprintf(__('Function <i>%s</i> saved.'),$_POST['function_name']);
}
Soll ich mal testweise $dbPrefix durch 'sk_cpo_' ersetzen (Prefix meiner Webseiten-Datentabellen) oder macht das keinen Sinn?
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7552
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von MarkusR »

Tja, liegt ganz sicher am seit Jahren ohne Probleme eingesetzten Modul-Code und nicht an Deiner unbekannten "Funktion"...
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: 7552
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von MarkusR »

Bitte denke doch mal über folgenden Sachverhalt nach:

Vor Deinem Versuch eine selbst gebastelte Funktion zu speichern, hat alles funktioniert.
Mit Deiner selbst gebastelten Funktion gibt nun aber Probleme.
Wo könnte also der Fehler oder die Ursache liegen?
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: 7552
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von MarkusR »

Wenn
if (isset($_POST['action']) && $_POST['action']=='save' && $_POST['function_name']!='' && $_POST['function_code']!='') {
und somit alles folgende NICHT funktioniert, könnte es sein, dass Du die Variable $_POST (unbewußt) in Deinem geheimen Code manipulierst.
Ich werde nicht weiter fragen, wenn Du es eben - warum auch immer - geheim halten willst...

Ansonsten gilt das hier geschriebene: viewtopic.php?f=13&t=4800
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: 849
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von hscha »

Hallo Markus,
ich habe das Modul lange nicht benutzt, weil alles lief. Gestern stellte ich beim dem Versuch, eine neue Funktion einzurichten, fest, dass dies nur über den Umweg über das Anlegen eines neuen Datensatzes in der Tabelle ging. Sorry aber die Funktion hat dann keine Fehler verursacht und ich habe auch keinen geheimen Code geschrieben...
Beim Anlegen habe ich lediglich eine Kommentarzeile

Code: Alles auswählen

/* testfunktion */
speichern wollen, um dann den restlichen Code zu schreiben. Das geht zurzeit auch nicht...
Nach wie vor kann ich direkt über das Modul keine Funktion neu anlegen. Das ging vor der neuen und jetzt nach der neuen nicht. Deshalb schrieb ich dir.
Hier die Funktion "downloadlinks":

Code: Alles auswählen

/* Download-Links in Abhängigkeit von der usergroup ausgeben */
/* Usergroup */

$usergroup = $_SESSION['SID_user']['usergroups_id'];
               

/* usergroups: 1 = gk-mitglieder; 2 = gemeindeuser; 7 = projektchor; 10 = blockierte User */

/* download-links definieren */
if (defined ('LOGIN')){
  $dnl_son = '<a href="../_rubric/index.php?rubric=song-download">Liederverzeichnis</a>';
  $dnl_adv = '<a href="../_rubric/index.php?rubric=advents-download">Advent & Weihnacht</a>';
  $dnl_shk = '<a href="../_rubric/index.php?rubric=download-schatzkiste">Schatzkiste</a>';
  $dnl_aud = '<a href="../_rubric/index.php?rubric=audios">Aufnahmen</a>';
  $dnl_tze = '<a href="../_rubric/index.php?rubric=taize">Taizé-Osternacht 2021</a>';
  $dnl_kon = '<a href="../_rubric/detail.php?rubric=konzerthistorie&nr=5928">Konzert-Historie</a>';
  $trennstrich1 = '&nbsp;-&nbsp;';
  $trennstrich2 = '&nbsp;-&nbsp;';
  $trennstrich3 = '&nbsp;-&nbsp;';
  $trennstrich4 = '&nbsp;-&nbsp;';
  $trennstrich5 = '&nbsp;-&nbsp;';

/* usergroup Gemeindeleitung */
  if ($usergroup == '2'){
  $dnl_shk = ''; $trennstrich1 = ''; $trennstrich2 = '';
  $dnl_aud = ''; $trennstrich3 = '';
  $dnl_tze = ''; $trennstrich4 = '';
  $dnl_kon = ''; $trennstrich5 = '';}

/* Projektchor-Gruppe */
  if ($usergroup == '7'){
  $dnl_son = ''; $trennstrich1 = '';
  $dnl_adv = ''; $trennstrich2 = '';
  $dnl_shk = ''; $trennstrich3 = '';
  $dnl_aud = ''; $trennstrich4 = '';
  $dnl_kon = ''; $trennstrich5 = '';}

/* rubrikfilter */
  switch ($_REQUEST['rubric']){
    case 'song-download': $dnl_son = ''; $trennstrich1 = ''; break;
    case 'advents-download': $dnl_adv = ''; $trennstrich2 = ''; break;
    case 'download-schatzkiste': $dnl_shk = ''; $trennstrich3 = ''; break;
    case 'audios': $dnl_aud = ''; $trennstrich4 = ''; break;
    case 'taize': $dnl_tze = ''; $trennstrich5 = ''; break;
    case 'konzerthistorie': $dnl_kon = ''; $trennstrich5 = ''; break;
  }
/* string zusammenbauen */
  $downloadLinkString = 'Weitere Downloads:<br>'.$dnl_son.$trennstrich1.$dnl_adv.$trennstrich2.$dnl_shk.$trennstrich3.$dnl_aud.$trennstrich4.$dnl_tze.$trennstrich5.$dnl_kon;
}

/* ausgäbe des link-strings */
return  $downloadLinkString;
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7552
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von MarkusR »

Ok,

ich habe Deine beiden Codes als Funktionen problemlos unter einer PHP 8.3 (MariaDB 10.3.39) und einer PHP 8.4 (MariaDB 10.11.7) Installation speichern können.
Der Code sieht auch so aus, als würde er keine Fehler verursachen.
Es scheint auch vor allem auf globale Variablen zurückgegriffen zu werden, so dass kein Globalisieren erforderlich ist.

Da beim Existieren des Datensatzes ein Speichern möglich ist, dürfte der Speichervorgang selbst auch nicht das Problem sein.

Ich habe jetzt auch keinen Hinweis für MariaDB gefunden, dass der REPLACE-Syntax nicht wie gewohnt funktionieren würde.
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: 849
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von hscha »

Ich verfahre einfach weiter so, dass ich über "Datentabellen" in der mod_function-Tabelle einen neuen Datensatz anlege und dann damit arbeite.
Danke auf jeden Fall für dein Durchchecken!
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7552
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von MarkusR »

Was mir noch auffällt:

Code: Alles auswählen

$usergroup = $_SESSION['SID_user']['usergroups_id'];
setzt voraus, dass $_SESSION['SID_user']['usergroups_id'] gesetzt ist, ansonsten würde ein Fehler produziert.

Auch

Code: Alles auswählen

switch ($_REQUEST['rubric'])
könnte klemmen, wenn $_REQUEST['rubric'] nicht gesetzt ist und könnte einen default-Wert vertragen.

Code: Alles auswählen

  $downloadLinkString = 'Weitere Downloads:<br>'.$dnl_son.$trennstrich1.$dnl_adv.$trennstrich2.$dnl_shk.$trennstrich3.$dnl_aud.$trennstrich4.$dnl_tze.$trennstrich5.$dnl_kon;
könnte auch klemmen, wenn die ganzen Variablen nur gesetzt werden, wenn man eingeloggt ist.

Inwiefern das jetzt problematisch ist, hängt vom sonstigen Code ab.
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: 849
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von hscha »

Ich habe mal diesen Code

Code: Alles auswählen

$usergroup = $_SESSION['SID_user']['usergroups_id'];
gelöscht, da $usergroup im _global_header definiert wird und

Code: Alles auswählen

if (defined ('LOGIN'))
nur beim Zusammenstellen des Ausgabestrings verwendet. Dadurch werden alle Variablen weiter oben definiert, ob nun 'LOGIN' gesetzt ist oder nicht.

Code: Alles auswählen

/* string zusammenbauen */
if (defined ('LOGIN')){
  $downloadLinkString = 'Weitere Downloads:<br>'.$dnl_son.$trennstrich1.$dnl_t25.$trennstrich6.$dnl_adv.$trennstrich2.$dnl_shk.$trennstrich3.$dnl_aud.$trennstrich4.$dnl_tze.$trennstrich5.$dnl_kon;
}
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7552
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von MarkusR »

Ich habe mir den recht simplen Modulcode jetzt zweimal angesehen und keinen Grund dafür gefunden, dass (bei Dir) zwar keine Einträge angelegt werden können, vorhandene Einträge aber bearbeitet und gespeichert werden können. Immerhin passiert das mit ein und der selben Abfrage!

Die einzige (aber wohl unwahrscheinliche) Erklärung wäre das Fehlen von Funktionsname oder Funktionscode, da dann nicht gespeichert wird.
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: 849
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von hscha »

Danke, Markus!
Ich habe hin und her probiert. Es will nicht funktionieren. Aber es gibt ja einen Weg...
Grüße von Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7552
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von MarkusR »

Du könntest vor der von Dir genannten Zeile

Code: Alles auswählen

if (isset($_POST['action']) && $_POST['action']=='save' && $_POST['function_name']!='' && $_POST['function_code']!='') {
einfach noch eine Kontrollausgabe mittels

Code: Alles auswählen

print_r($_POST);
einbauen, da wohl bei der Prüfung auf diese Variablen kein Erfolg gemeldet wird, und somit Abfrage und Meldung nicht ausgeführt werden.
Im Quelltext der Seite sollte dann eine Ausgabe zu sehen sein.

Das ist zumindest das, was ich machen würde.
Nach der Prüfung dann wieder entfernen/auskommentieren.
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: 849
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

Re: neue Seitentemplate-Funktion anlegen

Beitrag von hscha »

Danke Markus!
Mit dem eingefügten Code funktioniert auch das Speichern wieder. Ausgabe:

Code: Alles auswählen

Array ( [action] => save [function_name] => testfunction2 [function_args] => [function_code] => /* testfunction 2 */ )
Verstehe das, wer will!