WBCE CMS – Way Better Content Editing.
You are not logged in.
Ja: Manche Module funktionieren nicht richtig, wenn sie per SectionPicker (Droplet) aufgerufen wurden.
Kann ich das innerhalb des Moduls feststellen, ob der Abschnitt per Droplet aufgerufen wurde?
Was funktioniert nicht?
Fehlt ggf. das frontend.js?
“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale
Offline
Ich frage, weil das SectionPicker Droplet die frontend.js und ggf. frontend_body.js nicht lädt:
https://github.com/WBCE/WBCE_CMS/blob/1 … Picker.php
Das ist bereits für die kommende Version behoben worden.
Christian
“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale
Offline
Ohne mehr Info darüber, was nicht funktioniert, kann man schwer Hinweise geben.
Eins steht fest, auf Core-Ebene kannst Du für das Modul nicht ermitteln, ob eine Section über den Section-Picker oder über die page_content(X) Funktion ausgegeben wird.
Ich habe hier aber eine Funktion, mit der könntest Du das Problem anders angehen (und kompatibel auch mit älteren WB/CE Versionen), aber ich weiß ja nicht genau, was Du mit der ermittelten Info anfangen oder die Modulausgabe über das SectionPicker Droplet korrigieren willst, wenn Du die Info hast....
Christian
“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale
Offline
Eigentlich wollte ich Frontend edit bei teasers deaktivieren, aber das scheint ja gut zu funktionieren.
Ach so,
aber was meintest Du eingangs, dass Module nicht richtig funktionieren, wenn sie über SectionPicker eingebunden werden?
“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale
Offline
Im SectionPicker Droplet wird die Section-ID zwischengespeichert und dann der Inhalt der "zu pickenden Section" ermittelt (in der Datenbank nachgeschaut, welches Modul das ist), und dessen view.php dann aufgerufen und die Ausgabe davon gepuffert und zurückgegeben.
Nun holt man sich in aller Regel über den Section Picker Sections von anderen Seiten. In den seltensten Fällen wird man sich von einer Seite eine Section, die weiter oben schon mal aufgetaucht ist, weiter unten nochmal einbinden oder umgekehrt.
Die global $page_id wird aber nicht geändert. Während der Ausgabe kann man also prüfen, ob die $page_id diejenige ist, auf der die Section mit der aktuellen $section_id zusammen passt (steht z.B. in der sections-Tabelle, aber bei vielen Modulen auch in der Tabelle des jeweiligen Moduls). Wenn die $page_id eine andere ist, dann wird die aktuelle Section wohl gerade per SectionPicker-Droplet auf einer anderen Seite eingebunden.
Wird eine Section ein zweites Mal auf der ursprünglichen Seite eingebunden, funktioniert dieser Test leider nicht.
Offline
Sehr cool, Martin. Daran habe ich gar nicht gedacht, die durch den SectionPicker übergebene $section_id zu verwenden.
Also, Korrektur/Ergänzung: Man kann auf Core-Ebene feststellen, ob die Section auf einer anderen Seite erstellt wurde, als auf der wo sie im Frontend dargestellt wird.
Hier dann eine kleine Funktion, die das abfragt:
/**
* Is section from this page?
* Check if a specific section belongs to a specific page
*
* @param int $iSectionID | the section ID you're asking for
* @param int $iPageID | (optional) if set the set page ID will
* | be checked instead of the current one
*
* @return boolean | returns true if section is from the page
*/
function is_section_from_this_page($iSectionID, $iPageID = NULL){
$iPageID = $iPageID == NULL ? PAGE_ID : (is_numeric($iPageID) ? $iPageID : 0);
$bRetVal = false;
if($iPageID > 0){
$sSql = "SELECT `page_id` FROM `%ssections` WHERE `section_id` = %d AND `page_id` = %d";
$resQuery = $GLOBALS['database']->get_one(sprintf($sSql, TABLE_PREFIX, $iSectionID, $iPageID));
if($resQuery != false){
$bRetVal = true;
}
}
return $bRetVal;
}
// Verwendung:
is_section_from_this_page($section_id); // wenn die PAGE_ID verwendet werden soll
is_section_from_this_page($section_id, 7); // wenn die ID einer anderen Seite verwendet werden soll
Gruß,
Christian
Last edited by stefanek (01.03.2019 08:59:54)
“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale
Offline
Nur kurz..
Es gibt $page_id und PAGE_ID
Die konstante wird wohl immer stimmen, die variable kann bereits falsch sein.
Eine Variable $page_id vewendet die Funktion überhaupt nicht.
Das zweite Argument ist für den Fall, dass Du eine andere PageID abfragen willst und nicht die Gegenwärtige PAGE_ID ODER wenn Du die Funktion im Backend verwenden willst, wo PAGE_ID nicht gesetzt ist.
Last edited by stefanek (01.03.2019 10:42:19)
“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale
Offline
eine weitere Lösung wäre eine Anpassung des SectionPicker-Droplets. Wenn dieses ganz am Anfang eine globale Variable setzt, z.B.
global $SectionPickerActive = TRUE;
und am Ende des Droplets wieder
$SectionPickerActive = FALSE;
Dann kann man an einer beliebigen Stelle in Modulen / Snippets etc. abfragen:
global $SectionPickerActive;
if(isset($SectionPickerActive)&&($SectionPickerActive)){
// mache etwas spezielles wenn die Section gepickt wird
} else {
// und mache das, wenn kein SectionPicker beteiligt ist
}
Das funktioniert dann auch, wenn der SectionPicker auf der gleichen Seite wie die ursprüngliche Section auftaucht (z.B. um irgendwelche Inhalte in der Rechten Spalte nochmal in etwas anderer Darstellung anzuzeigen, wie auch immer dann die Darstellung angepasst wird... vielleicht automatisch anhand der Spaltenbreite bei responsiven Modulen...)
Offline
stefanek
Hallo!
Am "grindmobil" ist zu erkennen, dass ich mich nur recht eingeschränkt artikulieren kann... ;-)
Mit ging es eigentlich darum, das "schnell und einfach" zu erkennen, ohne weitere Datenbankabfrage. Eben anhand einiger Variablen, die sich praktisch durch den SectionPicker ergeben.
Hintergrund ist, dass man die Frontend-Edit Funktion abschalten kann bzw darauf hinweist, dass ein Abschnitt nur ein Klon ist. Um böse Überraschungen zu ersparen. Betrifft speziell Teasers, ich war verblüfft, dass das Editieren im Frontend so reibungslos klappt, dass man gar nicht merkt, dass man eigentlich am falschen Abschnitt ist.
dann ist die Anpassung des SectionPicker-Droplets mit den zwei Zuweisungen oben ja vielleicht die "schnell und einfach"-Lösung
Offline