WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

You are not logged in.

#1 27.02.2019 15:43:15

grindbatzn
Guest

In einem Modul feststellen, ob per Section-Picker aufgerufen

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?

#2 27.02.2019 15:53:05

stefanek
Developer

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

Was funktioniert nicht?
Fehlt ggf. das frontend.js?


"All the knowledge I possess everyone else can acquire, but my heart is all my own."
Johann Wolfgang von Goethe

Offline

#3 27.02.2019 17:04:19

stefanek
Developer

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

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


"All the knowledge I possess everyone else can acquire, but my heart is all my own."
Johann Wolfgang von Goethe

Offline

#4 28.02.2019 11:23:33

stefanek
Developer

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

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


"All the knowledge I possess everyone else can acquire, but my heart is all my own."
Johann Wolfgang von Goethe

Offline

#5 28.02.2019 15:51:29

grindmobil
Guest

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

Eigentlich wollte ich Frontend edit bei teasers deaktivieren, aber das scheint ja gut zu funktionieren.

#6 28.02.2019 16:04:10

stefanek
Developer

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

Ach so,
aber was meintest Du eingangs, dass Module nicht richtig funktionieren, wenn sie über SectionPicker eingebunden werden?


"All the knowledge I possess everyone else can acquire, but my heart is all my own."
Johann Wolfgang von Goethe

Offline

#7 01.03.2019 00:27:56

mrbaseman
Developer

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

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

#8 01.03.2019 08:43:17

stefanek
Developer

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

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)


"All the knowledge I possess everyone else can acquire, but my heart is all my own."
Johann Wolfgang von Goethe

Offline

#9 01.03.2019 10:27:37

grindmobil
Guest

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

Nur kurz..
Es gibt $page_id und PAGE_ID

Die konstante wird wohl immer stimmen, die variable kann bereits falsch sein.

#10 01.03.2019 10:40:46

stefanek
Developer

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

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)


"All the knowledge I possess everyone else can acquire, but my heart is all my own."
Johann Wolfgang von Goethe

Offline

#11 01.03.2019 14:44:01

mrbaseman
Developer

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

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

Liked by:

stefanek

#12 01.03.2019 16:50:21

grindbatzn
Guest

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

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.

#13 01.03.2019 17:51:46

mrbaseman
Developer

Re: In einem Modul feststellen, ob per Section-Picker aufgerufen

dann ist die Anpassung des SectionPicker-Droplets mit den zwei Zuweisungen oben ja vielleicht die "schnell und einfach"-Lösung smile

Offline

Board footer

Powered by FluxBB

up