Author Topic: css.functions.php  (Read 2172 times)

Offline Frika

  • Posts: 29
css.functions.php
« on: March 22, 2008, 08:06:02 PM »
Hallo,
bin etwas ratlos... Ich habe mir auf Grundlage des Hello World module zwei eigene gebastelt. Das eine zeigt mit einen Zitatetext mit Quotes an und das andere ist für den Begrüssungstext auf der Startseite. Dort wird der erste Buchstabe durch ein Bild von einem speziellen Font ersetzt(drop cap). Soweit alles gut. Funktioniert auch alles prima.  Auf meiner Startseite habe ich jetzt beide Module im Einsatz.
Jetzt zum Backend: Da stehen jetzt auch die beiden Module untereinander und können bearbeitet werden. Auch noch gut. Aber da gibt es ja die Buttons "BEARBEITE CSS".  Wenn ich jetzt auf den Button BEARBEITE CSS klicke bekomme ich die cssDatei des ersten Moduls zur Bearbeitung dargestellt. Klicke auf den Button BEARBEITE CSS im zweiten Modul bekomme ich jedoch wieder die css Datei des ersten Moduls  zur Bearbeitung dargestellt. Es ist egal in welcher Reihenfolge die zwei Module im Backend stehen. Beim ersten die richtige cssDatei und im zweiten wieder die vom Ersten. Die Variablennamen habe ich soweit notwendig in allen Moduldateien den entsprechenden Modulnamen angepasst. Ich hab das Gefühl das in der modify.php vom zweiten Modul die gleiche css.functions.php wie im Ersten verwendet wird. Es ist ein bisschen theorethisch aber vielleicht hat jemand mal ein ähnliches Problem gehabt.
Danke + Gruß
Frika

Offline kweitzel

  • WebsiteBaker Org e.V.
  • **
  • Posts: 6983
  • Gender: Male
Re: css.functions.php
« Reply #1 on: March 22, 2008, 09:42:40 PM »
Hallo Frika,

pruef doch mal nach, ob Du vielleicht bei den Pfaden einen Fehler gemacht hast und beide auf den gleichen Pfad zurueckgreifen (das hoert sich naemlich so an ...)

Gruss

Klaus

Offline Frika

  • Posts: 29
Re: css.functions.php
« Reply #2 on: March 22, 2008, 10:36:40 PM »
Ja das hört sich wirklich so an... Ist es aber leider definitiv nicht. Wie gesagt, das Modul welches an erster Stelle steht (egal welches) gibt offenbar den Pfad vor den das Modul verwendet das an zweiter Stelle steht. Einmal zeigt er in das 'zitate' Verzeichniss oder eben in das 'opener' Verzeichniss.   Ich glaube das es mit dieser Funktion in der css.functions.php zusammenhängt:
Code: [Select]
if (!function_exists('css_edit')) {
    function css_edit() {
        global $page_id, $section_id, $CAP_EDIT_CSS;
      // extract the module directory
        $mod_dir = basename(dirname(__FILE__));
        $frontend_css = mod_file_exists('frontend.css');
        $backend_css = mod_file_exists('backend.css');
       
        if($frontend_css || $backend_css) {
             // display link to edit the optional CSS module files
          $file = $frontend_css ? 'frontend.css' : 'backend.css';
            $output  = '<div class="mod_' .$mod_dir .'_edit_css"><a href="' .WB_URL .'/modules/' .$mod_dir .'/edit_css.php';
            $output .= '?page_id=' .$page_id .'&section_id=' .$section_id .'&edit_file=' .$file .'">';
            $output .= $CAP_EDIT_CSS .'</a></div>';
      echo $output;
    }
  }
}

Ich habe noch ein bisschen rumgespielt und habe verschiedene Bezeichnungen in die Sprachdateien geschrieben. Und diese Variablen, in dieser Funktion wäre das die $CAP_EDIT_CSS, werden richtig eingelesen. Aber das die module directory ist seltsamerweise beidesmal die gleiche.($mod_dir = basename(dirname(__FILE__)); )
 Gruß Frika

Offline kweitzel

  • WebsiteBaker Org e.V.
  • **
  • Posts: 6983
  • Gender: Male
Re: css.functions.php
« Reply #3 on: March 23, 2008, 07:46:25 AM »
Dann pruef doch mal bitte die Eintraege in der Datei info.php der Module ...

Gruss

Klaus

Offline Frika

  • Posts: 29
Re: css.functions.php
« Reply #4 on: March 23, 2008, 10:00:36 PM »
Leider Fehlanzeige. Geht ja eigentlich auch nicht denn sonst würde man ja die module in die gleiche directory installieren... Ne ne das ist alles korrekt eingetragen. Ich vermute das es so was in der Art einer globalen Variable ist die da das Verzeichniss vorgibt welches in dem erst gelisteten Modul generiert wird. Ich weiß das hört sich etwas verwirrt an. Liegt vielleicht daran das ich die Programmiertermini nicht so geschliffen drauf hab... Falls es jemand interessiert oder Zeit hat  - ich würde meine Module auch gerne weitergeben um dafür eine Lösung zu bekommen.
Dnake  + gruß
Frika

Ralf Hertsch

  • Guest
Re: css.functions.php
« Reply #5 on: March 24, 2008, 07:16:59 AM »
Hallo Frika,

Quote
Aber das die module directory ist seltsamerweise beidesmal die gleiche.($mod_dir = basename(dirname(__FILE__)); )

Nicht seltsamerweise sondern logischerweise. Du bindest die css.functions.php mit require_once() ja nur einmal ein, nämlich mit dem Modul in der ersten Section, entsprechend ist durch basename(dirname(__FILE__)) das verwendete Verzeichnis immer das gleiche. Du must dir also einen Weg einfallen lassen, wie du css.functions.php mitteilst, welche *.css in welchem Verzeichnis bearbeitet werden soll.

Edit: Quick & Dirty könnte folgendes funktionieren (nicht getestet):

In der css.functions.php

Code: [Select]
if (!function_exists('css_edit')) {
    function css_edit() {
        global $page_id, $section_id, $CAP_EDIT_CSS;
      // extract the module directory
        $mod_dir = basename(dirname(__FILE__));
        $frontend_css = mod_file_exists('frontend.css');
        $backend_css = mod_file_exists('backend.css');

        if($frontend_css || $backend_css) {
             // display link to edit the optional CSS module files
          $file = $frontend_css ? 'frontend.css' : 'backend.css';
            $output  = '<div class="mod_' .$mod_dir .'_edit_css"><a href="' .WB_URL .'/modules/' .$mod_dir .'/edit_css.php';
            $output .= '?page_id=' .$page_id .'&section_id=' .$section_id .'&edit_file=' .$file .'">';
            $output .= $CAP_EDIT_CSS .'</a></div>';
      echo $output;
    }
  }
}

durch:

Code: [Select]
if (!function_exists('css_edit')) {
    function css_edit($use_module='') {
        global $page_id, $section_id, $CAP_EDIT_CSS;
      // extract the module directory
      if (!empty($use_module)) {
        $mod_dir = $use_module;    }
      else {
          $mod_dir = basename(dirname(__FILE__)); }
        $frontend_css = mod_file_exists('frontend.css');
        $backend_css = mod_file_exists('backend.css');

        if($frontend_css || $backend_css) {
             // display link to edit the optional CSS module files
          $file = $frontend_css ? 'frontend.css' : 'backend.css';
            $output  = '<div class="mod_' .$mod_dir .'_edit_css"><a href="' .WB_URL .'/modules/' .$mod_dir .'/edit_css.php';
            $output .= '?page_id=' .$page_id .'&section_id=' .$section_id .'&edit_file=' .$file .'">';
            $output .= $CAP_EDIT_CSS .'</a></div>';
      echo $output;
    }
  }
}

ersetzen und in der modify.php der jeweiligen Module

Code: [Select]
css_edit()
durch

Code: [Select]
css_edit('modulname')
ersetzen. Die Überprüfung durch css.functions.php, ob die Dateien existieren, wird dadurch allerdings ausgehebelt und es gibt sicher noch den einen oder anderen Haken, aber die grobe Richtung sollte stimmen.

Vielleicht kann Christian ja mal was dazu sagen. Mir fällt auf, dass das schon lange angedachte OOP Modul zum Bearbeiten der CSS sowie von Template Dateien wirklich überfällig ist...

Gruß
Ralf
« Last Edit: March 24, 2008, 08:12:54 AM by Ralf (Berlin) »

doc

  • Guest
Re: css.functions.php
« Reply #6 on: March 29, 2008, 05:19:39 PM »
Hallo Frika,

ja das ist in der Tat ein Problem im Hello World Modul, welches bisher nicht beachtet wurde.

Wie Ralf bereits erwähnt hängt das Problem mit der Funktion edit_css zusammen. Diese Funktion wird im Modul definiert, welches zuerst auf einer Seite eingebunden wird. Sobald eine Funktion in PHP definiert ist, kann diese nicht nochmal auf der gleichen PHP Seite definiert werden. Kein Problem, wenn Du z.B. mehrere Installationen ein und desselben Moduls hast. Sobald aber mehr als ein Modul ins Spiel kommen, kommt es zu den von Dir entdeckten Fehler.

Dieser Bug ist im Hello world v0.50 Modul behoben, bitte einmal testen.

Um Deine Module anzupassen, musst Du die Dateien css.functions.php und edit_css.php austauschen. Weiterhin muss in der Datei modify.php der Funktionsaufruf css_edit(); durch css_edit('modulverzeichnis'); ersetzt werden. Bitte achte darauf, dass dieses Funktion ausserhalb einer möglichen <form> platziert werden muss. Eine letzte Änderung betrifft die view.php. Dort wurde der Code zum Einbinden der frontend.css an WB 2.7 angepasst (läuft auch mit WB 2.6.x und kleiner).

Gruss Christian
« Last Edit: March 30, 2008, 03:30:46 PM by doc »

Offline Frika

  • Posts: 29
Re: css.functions.php
« Reply #7 on: April 02, 2008, 08:23:31 AM »
Hallo Christian, hallo Ralf,

vielen, vielen Dank für eure Aufmerksamkeit und Hilfestellung,
werde heute abend das update gleich mal testen. Das macht die Sache doch gleich viel leichter.
Besten Dank und Gruß
Frika


edit: Klappt alles bestens, der Hinweis mit dem Aufruf von edit_css() ausserhalb einer <form> war richtig gut ;-)
« Last Edit: April 04, 2008, 12:50:23 PM by Frika »