neuer Block (html)

Begonnen von pyr0, 08 Februar 2015, 23:22:10

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

pyr0

Nabend  :smile:


Wie kann man php code in Blockdateien parsen?
Wenn ich php Code in solch einen Block schreiben wird dieser immer als HTML KOmmentar gespeichert.
Es wäre doch gut, wenn zumondestens der admin in solchen Blöcken auch php hinterlegen kann oder?

Wenn man z.B. einen Slider in der DB hat und diesen Dann irgendwo in seinen Texten anzeigen lasen will, geht das nicht, weil der php Code immer als KOmmentar gespeichert wird.  :gruebel:

Oder gibt es dafür eine andere Lösung ?

Gruss pyr0 und schönen Abend noch
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Webfan

Moin,
Du solltest Dir einen Datei-Block anlegen:
blocks/block-meinblock.php


pyr0

Mahlzeit  :smile:


Ja das ist mir klar, nur wenn ich einen Block per HTML Funktion anlegen will <- das geht dann nicht mit PHP Code
Damit das ganze dann auch dynamisch und nicht statisch ist.
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Olaf / TerraProject

Das Parsen von php in einem HTML-Block ist nicht möglich, ist auch nicht ratsam....
Schreibe deinen php-Block selber, wie Waltkemper schon vorgeschlagen. Das ist effizienter und sicherer
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

pyr0

Morgen,

es muss doch auch anders möglich sein php code ein zubinden oder?


Wenn ich es über einen Block machen würde, wie bekomme ich diesen dann in ganz normalen Content den ich über das Adminpanel anlege?

Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Olaf / TerraProject

Warum willst du das unbedingt über einen HTML-Block machen. Der Block heist nicht umsonst "HTML"-Block. Also nur HTML-Code !!

Was ist schwer an einem neuen Block ?
Bsp: so könnte ein einfacher Block aussehen.....
<?php

defined
('mxMainFileLoaded') or die('access denied');

$mxblockcache true;
$blockfiletitle "Mein Titel";
$output="";
/* hier kommt dein PHP-Code rein

$a=500;
$b=20;

$output = $a + $b;

*/
if ($output) {
 
$content $output;
}

?>

g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

nudels64

Ich ergänze mal. So hab ich es auch gemacht. Den obigen Code fügst in eine neue Datei block-meinblock.php ein. Die Datei schiebst Du in den root/block Ordner. Dann ab ins Admin und den Cache zurücksetzen. Nun in die Blockverwaltung > neue Blockdatei, deinen Block auswählen. Fertig! Jetzt den Block da platzieren wo Du willst.
Lieben Gruß
Andreas
#################################
CMS-Version:
pragmaMx 2.1.2.94 (2014-10-22)
PHP-Version:
5.6.24-he.0
MySQL-Version:
5.6.31-77.0-log
Server-Version:
Apache

pyr0

Ja ihr habt ja alle recht,
nur wenn ich das ganze über einen Block mache (selbst diesen dann statisch bzw. dynamisch) ist nach wie vor das Problem: wie kommt der Block in meinen normalen Texte, welche ich mit dem Wysiwyg Editor erstelle ?
Ich hoffe jetzt ist es an gekommen  :gruebel:

Ich erstelle gerade ein Adminpanel und auch Blöcke für den NivoSlider, jedoch wäre es doch auch cool wenn man ala Wordpress dann den Slider auch im normalen Text einfügen könnte.

Deshalb die ursprüngliche Frage: wie kann ich mit dem wysiwyg editor php code einfügen?

include_once("modules.php?name=nivoSlider&op=view&viewid=12");
denn nur dann und auch nur dann ist der Slider auch dynamisch im eigenen Content nutzbar oder? Denn die id unterscheidet sich ja immer


So ich hoffe ich konnte etwas Licht ins dunkle  ....  :morning:


Gruss pyr0
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Olaf / TerraProject

ok, neuer Aspekt...

da hab ich ne Idee. Im HTML-Block verwendest du einen "Token" für den Slider (z.Bsp.: {slider|id=1}
in deinem Slider-Modul legst du unter "core" einen Hook an -> prepare.content.php (der hook ist genau dafür vorhanden)
über diesen können dann die dynamischen Elemente eingesetzt/ersetzt werden. Schau dir dazu mal das Documents an, da ist sowas eingebaut, ebenso in der Ency. Über solche Token kann man z.Bsp. Documents-Artikel in andere Artikel einbinden.

Ich hoffe, ich hab jetzt dein Problem verstanden.....
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

pyr0

Naja fast ....
Es geht nicht nur darum einen Block zu includieren, sondern darum dass man im Wysiwyg Editor, wenn man Artikel oder der gleichen anlegt solche Sachen wie
include_once("modules.php?name=nivoSlider&op=view&viewid=12");
machen kann.

Alles andere ist im Grunde genommen, am Ziel vorbei.
Kann man das mit dem Token auch im Wysiwyg Editor nutzen?

Jedenfalls werde ich erstmal das Adminpanel und den Block fertig stellen.

Ach so schönen Abend erst einmal noch 
Gruss pyr0
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Olaf / TerraProject

ja genau, dafür geht das mit den Token. Egal, welcher Artikel, egal in welchem Modul, wenn du den Hook verwendest, kannst du in jedem Inhalt deinen Slider darstellen.
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

pyr0

Cool  :thumbup:

Gibts da auch irgendwo ne Anleitung wie das genau geht?
Ist ja schön das Ihr INSIDER das wisst, nur die Hobbyprogrammierer kommen da nicht so einfach hinterher.

Könnt Ihr mir das mal bitte anhand eine Beispiel genauer erklären  :morning:

Danke und Gruss pyr0
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Olaf / TerraProject

beispiel aus der ency :

$hook = function($module_name, $dummy, &$content)
{
    /* $dummy wird hier nicht übergeben, ist also immer leer */

    global $prefix;
    if (MX_MODULE != $module_name) { // nur, wenn nicht eigenes Modul
        $temp = array();
        $result = sql_query("SELECT text.tid,text.title,text.text FROM ${prefix}_encyclopedia_text as text, ${prefix}_encyclopedia as section WHERE  text.eid=section.eid and section.active=1 ");
        while ($ency = sql_fetch_assoc($result)) {
            $text = mxCutString(strip_tags($ency['text']), 100);
            $temp[$ency['title']] = "<a href=\"modules.php?name={$module_name}&amp;op=content&amp;tid=" . $ency['tid'] . "\" title=\"" . $module_name . ": " . $text . "\" >" . $ency['title'] . "</a>";
        }
        $content = mxChangeContent($content, $temp, 1);
        unset ($temp);
    }
} ;


Kernfunktion ist die Funktion : mxChangeContent($content, $temp, 0);
dabei ist :
$content, der Modulcontent, der dem Hook übergeben wird
$temp - ein Array mit den Such- und Ersetzungswerten ... array("Suchstring"=>"Ersetzung");
0 - Anzahl der Ersetzungen (0=alle, 1 nur einmal , etc.)
mxChangeContent - scant den $content nach den "Suchstrings" durch und ersetzt diese mit der "Ersetzung"

teste folgendes in einem Hook

$temp=array("e"=>"E");
mxChangeContent($content, $temp, 0);

Dann ersetzt diese Funktion alle kleinen "e" durch große "E" :D

try it
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

pyr0

Okay ich bekomme es nicht so gebacken,
1. die prepare.content.php anlegen <- kein Problem, nur in dieser Datei dann die passende Datenbankfrage machen mit Parameter (id= "")
nur wie kann ich diese "id" dann an die prepare.content.php mit übergeben, dass die "id" dann auch für die DB-Befragung verwendet wird ?

$temp <- wäre ja das suchen und ersetzten

nur wie kann ich dann ein include durchführen von dem Block oder den Aufruf der passenden Funktion einbinden bzw mit dem $temp ersetzten?

Gruss pyr0
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Olaf / TerraProject

ok, ich gehe mal davon aus, daß nur ein paar Slider vorhanden sind....
dann setzt du deine Token erst zusammen, nach den du suchen willst....
prinzipiell kannst du in diese prepare.content.php ganz normal alles an Code einbinden, eigene Funktionen/Klassen darin unterbringen. Aber aufpassen, mit den Namen, da dieser Hook ja immer global aufgerufen wird....

das hier ist nur mal ein (unvollständiges) Beispiel:

// mit Datenbank

$result = sql_select("select * from ${prefix}_slider ");
while ($slider = sql_fetch_assoc($result)) {
    $id=$slider['id'];
    $inhalt=$slider[inhalt]; // aus der Datenbank oder direkt hier deinen HTML/JS-Code einbasteln
    $temp[{SLIDER|".$id."}"]=$inhalt;
}

/// alternativ, ohne Datenbank

for ($id=0;$id<5,$id++) {
$inhalt="<!-- HTML Code + JS-Code -->";
$inhalt .=" weiterer Code etc. ";

$temp[{SLIDER|".$id."}"]=$inhalt;
}

$content = mxChangeContent($content, $temp);
unset ($temp,$result); // bitte wieder aufräumen

Im Editor kannst du dann z.Bsp. {SLIDER|2} deinen Token schreiben, um dem Slider mit der ID "2" einzubauen.....

soweit jetzt klar ? :D
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

pyr0

Ja, ich hatte nur einen Denkfehler drin und zwar das ich immer irgendwie einen Block oder der gleichen einbinden muss  :red:
aber das ist ja nicht der Fall, ich muss einfach nur die DB Abfrage machen und das dann auf bereiten zur Ansicht und das war es dann schon oder ?

Muss man dann im Adminbreich bei den Hooks noch etwas einstellen?


Gruß pyr0
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Olaf / TerraProject

genau... verstanden
an den Hooks musst du nix machen, alle Hooks sind standardmäßig aktiv. Im Hooks-Manager kann man gezielt nur die Hooks ausschalten.
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

pyr0

Hab da noch eine Frage dazu:
Und jedes andere Modul schaut dann nach ob in dem Modul "Slider" dann die Datei prepare.content.php
vorhanden ist und baut das dann ein ?

Danke für Eure Mühe und Verständnis
Gruss pyr0
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Olaf / TerraProject

nicht die Module schauen nach....das System
Nachdem die Module mit Ihrer Ausgabe fertig sind, wird (im Normalfalle) von den Modulen die Foooter.php aufgerufen, dort wird dann der Content des Moduls genommen und über diesen Hook geschickt, dann wird die Seite weiter vom System zusammengesetzt... so mal ganz einfach erklärt... :D
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

pyr0

So werd die Idee wohl wieder aufgreifen und es einbauen im nivoSlider for pragmaMX  :morning:
Erster Screenshot vom Backend ist online

Bis bald pyr0
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!