[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
FIXED: Fußzeile des »Developer Addon« wird nicht sichtbar - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
chekka
Beiträge: 14
Registriert: 12. Jan 2007, 10:36
Wohnort: München
Kontaktdaten: Website

FIXED: Fußzeile des »Developer Addon« wird nicht sichtbar

26. Jul 2007, 09:55

Ich arbeite schon lange mit dem »Developer Addon«, das hat mir viel Zeit und viele Klicks erspart. Nun habe ich redaxo3_3b2 laufen und stelle fest, dass das geliebte Addon nicht mehr funktioniert. Stehe ich auf dem Schlauch oder ist das tatsächlich so?

Wenn ja, bitte schnell überarbeiten oder Hilfe geben, damit es wieder funktioniert.

Eigentlich sollte diese Funktion ohnehin als fester Bestandteil in redaxo aufgenommen werden.

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: Fußzeile des »Developer Addon« wird nicht sichtbar

26. Jul 2007, 11:45

Hej,
chekka hat geschrieben:Wenn ja, bitte schnell überarbeiten oder Hilfe geben, damit es wieder funktioniert.
Ohne es angesehen zu haben, vermute ich, dass du in der config die regex anpassen musst.

chekka hat geschrieben:Eigentlich sollte diese Funktion ohnehin als fester Bestandteil in redaxo aufgenommen werden.
Warum? Welchen plausiblen Grund gibt es, es mit in den Kern aufzunehmen?

vg Thomas

Benutzeravatar
chekka
Beiträge: 14
Registriert: 12. Jan 2007, 10:36
Wohnort: München
Kontaktdaten: Website

26. Jul 2007, 11:52

Warum? Welchen plausiblen Grund gibt es, es mit in den Kern aufzunehmen?
Nun ja, weil das editieren in einem texteditor wie »textwargler« deutlich schneller und komfortabler ist als das Überarbeiten der Templates und Module im Backend. Oder habe ich bei redaxo noch etwas nicht verstanden?

In jedem Fall: Danke für Deine schnelle Antwort.

gruß,
der chekka :wink:

Benutzeravatar
n.ruediger
Beiträge: 405
Registriert: 21. Mär 2007, 12:25
Wohnort: Frankfurt (Oder)
Kontaktdaten: ICQ Website Yahoo Messenger

26. Jul 2007, 16:21

Hallo,

war kein Regex, sondern ne Anpassung beim ersetzten. Weil vorher ja Tabellen benutzt wurden, die es nicht mehr gibt. Ich hab die Anpassungen an der Datei functions.inc.php im Ordner classes gemacht. Da ich es nicht hochstellen kann, hier der Inhalt - einfach zum Austauschen:

Code: Alles auswählen

<?php

function backendEdit($params){
    global $REX,$REX_USER;
    if($REX_USER){
	    if($REX_USER->isValueOf("rights","developer[]")){
	        $content = $params['subject'];
	        if($REX[ADDON][DEVELOPER][STATUS][MODULES]=="true") $developer_modules = "checked";
	        if($REX[ADDON][DEVELOPER][STATUS][TEMPLATES]=="true") $developer_templates = "checked";
	        $replace = '
	        <script>
	        if (document.implementation && document.implementation.createDocument)
	        {
	            xmlDoc = document.implementation.createDocument("", "", null);
	            xmlDoc.onload = function() { alert("Status gesetzt"); };
	        }
	        else if (window.ActiveXObject)
	        {
	            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	            xmlDoc.onreadystatechange = function () {
	                if (xmlDoc.readyState == 4) alert("Status gesetzt");
	            };
	        }
	        function saveStatus(obj){
	            status_modules = obj.developer_modules.checked;
	            status_templates = obj.developer_templates.checked;
	            var url = "./index.php?page=developer&function=setStatus&status_modules="+status_modules+"&status_templates="+status_templates;
	            xmlDoc.load(url);
	            //prompt("debug",url);
	            return false;
	        }
	        </script>
	        ';
	        $replace .= '<form name=addon_developer onSubmit="return saveStatus(this);" style=display:inline>';
	        $replace .= "<table cellpadding=0 cellspacing=0><tr><th style=\"padding: 0em 1em 0em 0em; color:#000000\">";
	        $replace .= "Redaxo Developer Addon: ";
	        $replace .= "</th><th style=\"padding: 0em 0.3em 0em 0em;\">";
	        $replace .= "<input type=checkbox name=developer_modules value=1 $developer_modules> ";
	        $replace .= "</th><th style=\"padding: 0em 1em 0em 0em; color:#000000\">";
	        $replace .= "Module automatisch updaten &nbsp;";
	        $replace .= "</th><th style=\"padding: 0em 0.3em 0em 0em;\">";
	        $replace .= "<input type=checkbox name=developer_templates value=1 $developer_templates> ";
	        $replace .= "</th><th style=\"padding: 0em 1em 0em 0em; color:#000000\">";
	        $replace .= "Templates automatisch updaten &nbsp;";
	        $replace .= "</th><th>";
	        $replace .= "<input type=submit value=ok> ";
	        $replace .= "</th></table>";
	        $replace .= "</form>";
	        $content = str_replace('<div id="rex-ftr">','<div id="rex-ftr"><div style="background-color: #AAB9A8; margin: 0em; padding: 0.5em; color: #000000;"><strong>'.$replace.'</strong></div>',$content);
	        return $content;
	    }
	}
}

function regenerateArticlesByJavascript($params){
    global $REX;
    if($REX[ADDON][developer][regenerate]){
        $regenerateString = $REX[ADDON][developer][regenerate];
        $content = $params['subject'];
        $content = '
        <div style="position: absolute; top: 10px; left: 10px;background-color:#EFEFEF;border:2px solid;padding:4px; font-family: tahoma, verdana, sans-serif; font-size: 11px; width: 200px;"><b>Redaxo Developer Addon regenerating Articles:</b>
        <div id="status"></div>
        </div>
        <script>
        function status(count)
        {
            var div = document.getElementById("status");
            if(div)
                div.innerHTML += "· ";
            count++;
            window.setTimeout("status(" + count + ");", 50);
        }
        status(0);

        function rel()
        {
            location.reload();
        }

        if (document.implementation && document.implementation.createDocument)
                {
                    xmlDoc = document.implementation.createDocument("", "", null);
                    xmlDoc.onload = function() { rel(); };
                }
                else if (window.ActiveXObject)
                {
                    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                    xmlDoc.onreadystatechange = function () {
                        if (xmlDoc.readyState == 4) rel()
                    };
                }
                else
                {
                    alert("Your browser cant handle this script");
                }
                var url = "./redaxo/index.php?page=developer&function=update&modules='.$regenerateString.'";
                //document.write(url);
                xmlDoc.load(url);
        </script>
        ';

        return $content;
    }
}
?>
Liebe Grüße,
Nicole

//Edit: Wozu man es braucht, ich weiß es auch nicht...

Benutzeravatar
chekka
Beiträge: 14
Registriert: 12. Jan 2007, 10:36
Wohnort: München
Kontaktdaten: Website

26. Jul 2007, 16:52

Supi, das klappt ja FAST ...
Leider wird im »live_edit« ordner die »status.inc.php« nicht beschrieben, bzw. auf »true« gesetzt. Wenn man das allerdings manuell macht dann klappt’s.

Zumindest kann ich jetzt so wieder damit arbeiten.

By the way ...
Ich verstehe wirklich nicht wieso jemand dieses Addon nicht super genial findet. Muss ich aber auch nicht. Mich macht es glücklich, das reicht mir!

Als dann, beste Grüße nach Frankfurt (Oder)
und vielen, vielen Dank an Dich, Nicole!

der chekka

Benutzeravatar
n.ruediger
Beiträge: 405
Registriert: 21. Mär 2007, 12:25
Wohnort: Frankfurt (Oder)
Kontaktdaten: ICQ Website Yahoo Messenger

26. Jul 2007, 16:58

Hast du denn die Schreibrechte für den Ordner und die Datei gesetzt?

Liebe Grüße,
Nicole

P.S.: Ich kopier mir den Code einfach in mein Editor, bearbeite ihn und kopiere ihn zurück...

Benutzeravatar
chekka
Beiträge: 14
Registriert: 12. Jan 2007, 10:36
Wohnort: München
Kontaktdaten: Website

26. Jul 2007, 17:15

Hast du denn die Schreibrechte für den Ordner und die Datei gesetzt?
Rechte sind auf 777.

Was mir da gerade noch aufgefallen ist:
Die Templates werden im »live_edit/templates« ordner angelegt, die Module leider nicht!
P.S.: Ich kopier mir den Code einfach in mein Editor, bearbeite ihn und kopiere ihn zurück...
Aber es ist doch so wunderbar, wenn ich mit »Textwrangler« die entsprechende Datei direkt auf dem Server öffnen, bearbeiten und sichern kann. Keine Kopieraction mehr! Niewieder!!!
:lol:

grüße!

Benutzeravatar
Ruediger.Nitzsche
Beiträge: 2117
Registriert: 13. Dez 2005, 09:29
Wohnort: Coburg
Kontaktdaten: Website

26. Jul 2007, 17:54

chekka hat geschrieben: Aber es ist doch so wunderbar, wenn ich mit »Textwrangler« die entsprechende Datei direkt auf dem Server öffnen, bearbeiten und sichern kann. Keine Kopieraction mehr! Niewieder!!!
Aus dem Grund haben wir das Templatesystem von Redaxo für uns angepasst und ausgelagert, ist aber alles Geschmackssache.

Rüdiger
gn2 netwerk | gn2 hosting | REDAXO Referenzen | Github
Supportanfragen per PN werden gepflegt ignoriert

Benutzeravatar
n.ruediger
Beiträge: 405
Registriert: 21. Mär 2007, 12:25
Wohnort: Frankfurt (Oder)
Kontaktdaten: ICQ Website Yahoo Messenger

26. Jul 2007, 20:01

chekka hat geschrieben: Was mir da gerade noch aufgefallen ist:
Die Templates werden im »live_edit/templates« ordner angelegt, die Module leider nicht!
Die Module sollten eigentlich im Ordner live_edit/module landen. Ich hab das Addon ja nicht geschrieben, aber läuft es denn mit der Anpassung oder soll ich mir das noch mal genauer ansehen?

Liebe Grüße,
Nicole

Benutzeravatar
chekka
Beiträge: 14
Registriert: 12. Jan 2007, 10:36
Wohnort: München
Kontaktdaten: Website

26. Jul 2007, 20:06

... oder soll ich mir das noch mal genauer ansehen?
Ich komme gerade wegen eines Auftrags nicht dazu.
Wenn Du Du Zeit und Muse hast, denn wäre das ’ne tolle Sache!

Ich sag’ jetzt schon mal „DANKE”!
chekka
Der erste Trunk aus dem Becher der
Naturwissenschaft macht atheistisch;
aber auf dem Grund des Bechers
wartet Gott.

Werner Heisenberg, *1901 - †1976
Physiknobelpreis 1932

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

26. Jul 2007, 20:26

Hej,
n.ruediger hat geschrieben:P.S.: Ich kopier mir den Code einfach in mein Editor, bearbeite ihn und kopiere ihn zurück...
Geauso arbeite ich auch. Damals hatte das Addon noch Fehler, so dass es passieren konnte, dass die Templates sich gegenseitig überschrieben hatten.

vg Thomas

Benutzeravatar
chekka
Beiträge: 14
Registriert: 12. Jan 2007, 10:36
Wohnort: München
Kontaktdaten: Website

26. Jul 2007, 21:28

... so dass es passieren konnte, dass die Templates sich gegenseitig überschrieben hatten.
Ich hatte echt noch nie Schwierigkeiten damit, ehrlich!
Bald nachdem ich REDAXO entdeckt hatte stieß ich auch auf das DEV.ADD und seit da benutze ich es intensivst. Es hat mich nie enttäuscht.

ALLERDINGS: Man muss sich natürlich an das Handling gewöhnen.
Wenn man nämlich duch mal schnell im Backend was ändern möchte muss man das Addon zuerst ausschalten. Das habe ich auch nicht sofort geCHEKKAt.

Das wäre übrigens ein SUPER feature, wenn man sowohl als auch (online-editing UND backend-editing) verwenden könnte.

chekk it out!
Der erste Trunk aus dem Becher der
Naturwissenschaft macht atheistisch;
aber auf dem Grund des Bechers
wartet Gott.

Werner Heisenberg, *1901 - †1976
Physiknobelpreis 1932

Benutzeravatar
n.ruediger
Beiträge: 405
Registriert: 21. Mär 2007, 12:25
Wohnort: Frankfurt (Oder)
Kontaktdaten: ICQ Website Yahoo Messenger

26. Jul 2007, 22:10

Hallo,

hier die Anpassung für die Datei "class.live_edit.inc.php" um auch die Module bearbeiten zu können.

Code: Alles auswählen

<?php
class liveEdit {

    var $livePath;
    var $ModulePath = "modules/";
    var $ModuleInputExtension = ".input.php";
    var $ModuleOutputExtension = ".output.php";
    var $TemplatePath = "templates/";
	var $TemplateExtension = ".template.php";

    function liveEdit(){
        global $REX;
        $this->livePath = $REX[ADDON][developer][live_edit_path];
    }

    function getModuleFiles(){
	    if ($handle = opendir($this->livePath.$this->ModulePath)) {
	       while (false !== ($file = readdir($handle))) {
	           if ($file != "." && $file != "..") {
	              if(strstr($file,$this->ModuleInputExtension)){
	              	$id = str_replace($this->ModuleInputExtension,"",$file);
	              	$moduleFiles[] = $id;
	              }
	           }
	       }
	       closedir($handle);
		   return $moduleFiles;
	    }
    }
    function getTemplateFiles(){
	    if ($handle = opendir($this->livePath.$this->TemplatePath)) {
	       while (false !== ($file = readdir($handle))) {
	           if ($file != "." && $file != "..") {
	           		$id = str_replace($this->TemplateExtension,"",$file);
	              	$templateFiles[] = $id;
	           }
	       }
	       closedir($handle);
		   return $templateFiles;
	    }
    }
    function getModulesFormDB(){
        global $REX;
		$db = new rex_sql();
		$sql = "SELECT id,ausgabe,eingabe FROM ".$REX['TABLE_PREFIX']."module";
		$dbResult = $db->getArray($sql);
		if(is_array($dbResult)){
			foreach($dbResult as $var){
			    $modules[$var[id]][eingabe] = $var[eingabe];
			    $modules[$var[id]][ausgabe] = $var[ausgabe];
			}

			return $modules;
		}


    }
    function getTemplatesFormDB(){
        global $REX;
		$db = new rex_sql();
		$sql = "SELECT id,content FROM ".$REX['TABLE_PREFIX']."template";
		$dbResult = $db->getArray($sql);
		if(is_array($dbResult)){
			foreach($dbResult as $var){
			    $templates[$var[id]] = $var[content];
			}
			return $templates;
		}


    }
    function writeModuleFiles($overwrite=false){
        $modulesFiles = $this->getModuleFiles();
        $modulesDB = $this->getModulesFormDB();
        if(is_array($modulesDB)){
            foreach($modulesDB as $key=>$var){
                if(!@in_array($key,$modulesFiles) || $overwrite==true){
                    $inputFilename = $this->livePath.$this->ModulePath.$key.$this->ModuleInputExtension;
					$outputFilename = $this->livePath.$this->ModulePath.$key.$this->ModuleOutputExtension;
					$this->writeFile($inputFilename,$var[eingabe]);
					$this->writeFile($outputFilename,$var[ausgabe]);
					//print "wrote $outputFilename<br>";
				}

            }
        }
    }
    function writeTemplateFiles($overwrite=false){
        $templateFiles = $this->getTemplateFiles();
        $templatesDB = $this->getTemplatesFormDB();
        if(is_array($templatesDB)){
            foreach($templatesDB as $key=>$var){
                if(!@in_array($key,$templateFiles) || $overwrite==true){
					$templateFilename = $this->livePath.$this->TemplatePath.$key.$this->TemplateExtension;
					$this->writeFile($templateFilename,$var);
					//print "wrote $templateFilename<br>";
				}

            }
        }
    }
    function setConfigValue($filename,$valuename,$value){
		$content = file_get_contents($filename);
		$content = preg_replace("/\[$valuename\] = .*;/imsU","[$valuename] = \"".$value."\";",$content);
		$this->writeFile($filename,$content);
    }
    function writeFile($filename,$content){
        $handle = fopen($filename, 'w');
        fwrite($handle, $content);
        fclose($handle);
        @chmod($filename,0777);
    }
    function syncModules(){
        global $REX;
	    $moduleFiles = $this->getModuleFiles();
	    if(is_array($moduleFiles)){
	        foreach($moduleFiles as $modId){
	            if(file_exists($this->livePath.$this->ModulePath.$modId.$this->ModuleInputExtension) && file_exists($this->livePath.$this->ModulePath.$modId.$this->ModuleOutputExtension)){
	                $eingabe =  file_get_contents($this->livePath.$this->ModulePath.$modId.$this->ModuleInputExtension);
	                $ausgabe =  file_get_contents($this->livePath.$this->ModulePath.$modId.$this->ModuleOutputExtension);
	                $db = new rex_sql();
	                $sql = "UPDATE ".$REX['TABLE_PREFIX']."module SET eingabe='".mysql_escape_string($eingabe)."', ausgabe='".mysql_escape_string($ausgabe)."' WHERE id='$modId'";
	                $db->setQuery($sql);
	                if(mysql_affected_rows($db->identifier)!=0){
	                    $regenerate .= $modId."__";
	                    //print "generated db".$modId."<br>";
	                }
	            }
	        }
	    }
	    if($REX['REDAXO']){
			$this->regenerateArticlesByModultypId($modules);
		}
	    return $regenerate;
    }
    function syncTemplates(){
        global $REX;
	    $templateFiles = $this->getTemplateFiles();
	    if(is_array($templateFiles)){
	        foreach($templateFiles as $templateId){
	            if(file_exists($this->livePath.$this->TemplatePath.$templateId.$this->TemplateExtension)){
	                $content =  file_get_contents($this->livePath.$this->TemplatePath.$templateId.$this->TemplateExtension);
	                $db = new rex_sql();
	                $sql = "UPDATE ".$REX['TABLE_PREFIX']."template SET content='".mysql_escape_string($content)."' WHERE id='$templateId'";
	                $db->setQuery($sql);
	                if(mysql_affected_rows($db->identifier)>0){
	                    $this->generateTemplate($templateId,$content);
	                    //print "generated template db".$templateId."<br>";
	                }
	            }
	        }
	    }
    }
    function generateTemplate($templateId){
        global $REX;

        $templatePathDeveloper = $this->livePath.$this->TemplatePath.$templateId.$this->TemplateExtension;
        $templatePathRedaxo = $REX['INCLUDE_PATH']."/generated/templates/".$templateId.".template";
        copy($templatePathDeveloper,$templatePathRedaxo);
    }
    function regenerateArticlesByModultypId($modules){
    	global $PHP_SELF, $module_id, $FORM, $REX_USER, $REX, $I18N;
    	include_once($REX[INCLUDE_PATH]."/clang.inc.php");
	    $modules = explode("__",$modules);
	    array_pop($modules);
	    $gc = new rex_sql;
	    foreach($modules as $modul_id){
	        $gc->setQuery("SELECT DISTINCT(".$REX['TABLE_PREFIX']."article.id) FROM ".$REX['TABLE_PREFIX']."article
	        LEFT JOIN ".$REX['TABLE_PREFIX']."article_slice ON ".$REX['TABLE_PREFIX']."article.id=".$REX['TABLE_PREFIX']."article_slice.article_id
	        WHERE ".$REX['TABLE_PREFIX']."article_slice.modultyp_id='$modul_id'");
	        for ($i=0; $i<$gc->getRows(); $i++)
	        {
	            rex_generateArticle($gc->getValue($REX['TABLE_PREFIX']."article.id"));
	            $gc->next();
	        }
	    }
    }
	function developer_setStatus($what='modules',$status=false){
	    global $REX;
	    $statusFile = $REX[ADDON][developer][live_edit_path]."status.inc.php";
	    $stat = $status == "true" ? "true" : "false";
	    $this->setConfigValue($statusFile,$what,$status);
	    if($what == "MODULES" && $stat == "true"){
	        $this->writeModuleFiles(true);
	    }
	    if($what == "TEMPLATES" && $stat == "true"){
	        $this->writeTemplateFiles(true);
	    }
	}
}
?>
Liebe Grüße,
Nicole

Benutzeravatar
n.ruediger
Beiträge: 405
Registriert: 21. Mär 2007, 12:25
Wohnort: Frankfurt (Oder)
Kontaktdaten: ICQ Website Yahoo Messenger

26. Jul 2007, 22:52

So, zu guter letzt noch das Update, um auch das Backend wieder nutzen zu können. Jetzt wird nur noch in der Datenbank geupdatet, wenn das Änderungsdatum der Datei neuer ist, als der Moduleintrag. Dabei wird unterschieden, ob nur die Eingabe und/oder die Ausgabe geändert wurden.

Da ich das Addon nicht intensiv getestet habe, erfolgt die Benutzung auf eigene Gefahr. Ich bin aber gern bereit eventuelle Fehler (ich glaube aber nicht, dass die da sind ;-)) wieder auszubügeln.

Datei ist wieder die class.live_edit.inc.php im Ordner classes.

Code: Alles auswählen

<?php
class liveEdit {

    var $livePath;
    var $ModulePath = "modules/";
    var $ModuleInputExtension = ".input.php";
    var $ModuleOutputExtension = ".output.php";
    var $TemplatePath = "templates/";
	var $TemplateExtension = ".template.php";

    function liveEdit(){
        global $REX;
        $this->livePath = $REX[ADDON][developer][live_edit_path];
    }

    function getModuleFiles(){
	    if ($handle = opendir($this->livePath.$this->ModulePath)) {
	       while (false !== ($file = readdir($handle))) {
	           if ($file != "." && $file != "..") {
	              if(strstr($file,$this->ModuleInputExtension)){
	              	$id = str_replace($this->ModuleInputExtension,"",$file);
	              	$moduleFiles[] = $id;
	              }
	           }
	       }
	       closedir($handle);
		   return $moduleFiles;
	    }
    }
    function getTemplateFiles(){
	    if ($handle = opendir($this->livePath.$this->TemplatePath)) {
	       while (false !== ($file = readdir($handle))) {
	           if ($file != "." && $file != "..") {
	           		$id = str_replace($this->TemplateExtension,"",$file);
	              	$templateFiles[] = $id;
	           }
	       }
	       closedir($handle);
		   return $templateFiles;
	    }
    }
    function getModulesFormDB(){
        global $REX;
		$db = new rex_sql();
		$sql = "SELECT id,ausgabe,eingabe FROM ".$REX['TABLE_PREFIX']."module";
		$dbResult = $db->getArray($sql);
		if(is_array($dbResult)){
			foreach($dbResult as $var){
			    $modules[$var[id]][eingabe] = $var[eingabe];
			    $modules[$var[id]][ausgabe] = $var[ausgabe];
			}

			return $modules;
		}


    }
    function getTemplatesFormDB(){
        global $REX;
		$db = new rex_sql();
		$sql = "SELECT id,content FROM ".$REX['TABLE_PREFIX']."template";
		$dbResult = $db->getArray($sql);
		if(is_array($dbResult)){
			foreach($dbResult as $var){
			    $templates[$var[id]] = $var[content];
			}
			return $templates;
		}


    }
    function writeModuleFiles($overwrite=false){
        $modulesFiles = $this->getModuleFiles();
        $modulesDB = $this->getModulesFormDB();
        if(is_array($modulesDB)){
            foreach($modulesDB as $key=>$var){
                if(!@in_array($key,$modulesFiles) || $overwrite==true){
                    $inputFilename = $this->livePath.$this->ModulePath.$key.$this->ModuleInputExtension;
					$outputFilename = $this->livePath.$this->ModulePath.$key.$this->ModuleOutputExtension;
					$this->writeFile($inputFilename,$var[eingabe]);
					$this->writeFile($outputFilename,$var[ausgabe]);
					//print "wrote $outputFilename<br>";
				}

            }
        }
    }
    function writeTemplateFiles($overwrite=false){
        $templateFiles = $this->getTemplateFiles();
        $templatesDB = $this->getTemplatesFormDB();
        if(is_array($templatesDB)){
            foreach($templatesDB as $key=>$var){
                if(!@in_array($key,$templateFiles) || $overwrite==true){
					$templateFilename = $this->livePath.$this->TemplatePath.$key.$this->TemplateExtension;
					$this->writeFile($templateFilename,$var);
					//print "wrote $templateFilename<br>";
				}

            }
        }
    }
    function setConfigValue($filename,$valuename,$value){
		$content = file_get_contents($filename);
		$content = preg_replace("/\[$valuename\] = .*;/imsU","[$valuename] = \"".$value."\";",$content);
		$this->writeFile($filename,$content);
    }
    function writeFile($filename,$content){
        $handle = fopen($filename, 'w');
        fwrite($handle, $content);
        fclose($handle);
        @chmod($filename,0777);
    }
    function syncModules(){
        global $REX;
	    $moduleFiles = $this->getModuleFiles();
	    if(is_array($moduleFiles)){
	        foreach($moduleFiles as $modId){
	            if(file_exists($this->livePath.$this->ModulePath.$modId.$this->ModuleInputExtension) && file_exists($this->livePath.$this->ModulePath.$modId.$this->ModuleOutputExtension)){
	                $eingabe =  file_get_contents($this->livePath.$this->ModulePath.$modId.$this->ModuleInputExtension);
	                $eingabeDatum = fileatime($this->livePath.$this->ModulePath.$modId.$this->ModuleInputExtension);
	                $ausgabe =  file_get_contents($this->livePath.$this->ModulePath.$modId.$this->ModuleOutputExtension);
	                $ausgabeDatum =  fileatime($this->livePath.$this->ModulePath.$modId.$this->ModuleOutputExtension);
	                $db = new rex_sql();
	                $sql = "SELECT * FROM ".$REX['TABLE_PREFIX']."module WHERE id='$modId'";
	                $dbResult = $db->getArray($sql);
	                $sql = '';
	                if (($eingabeDatum > $dbResult[0]['updatedate']) AND ($ausgabeDatum > $dbResult[0]['updatedate']))
	                  $sql = "UPDATE ".$REX['TABLE_PREFIX']."module SET eingabe='".mysql_escape_string($eingabe)."', ausgabe='".mysql_escape_string($ausgabe)."' WHERE id='$modId'";
	                else if ($eingabeDatum > $dbResult[0]['updatedate'])
	                  $sql = "UPDATE ".$REX['TABLE_PREFIX']."module SET eingabe='".mysql_escape_string($eingabe)."' WHERE id='$modId'";
	                else if ($ausgabeDatum > $dbResult[0]['updatedate'])
	                  $sql = "UPDATE ".$REX['TABLE_PREFIX']."module SET ausgabe='".mysql_escape_string($ausgabe)."' WHERE id='$modId'";

                  if ($sql != '') {
  	                $db->setQuery($sql);
    	              if(mysql_affected_rows($db->identifier)!=0){
    	                  $regenerate .= $modId."__";
    	                  //print "generated db".$modId."<br>";
  	                }
  	              }
	            }
	        }
	    }
	    if($REX['REDAXO']){
			$this->regenerateArticlesByModultypId($modules);
		}
	    return $regenerate;
    }
    function syncTemplates(){
        global $REX;
	    $templateFiles = $this->getTemplateFiles();
	    if(is_array($templateFiles)){
	        foreach($templateFiles as $templateId){
	            if(file_exists($this->livePath.$this->TemplatePath.$templateId.$this->TemplateExtension)){
	                $content =  file_get_contents($this->livePath.$this->TemplatePath.$templateId.$this->TemplateExtension);
	                $contentDatum = fileatime($this->livePath.$this->TemplatePath.$templateId.$this->TemplateExtension);
	                $db = new rex_sql();
	                $sql = "SELECT * FROM ".$REX['TABLE_PREFIX']."template WHERE id='$templateId'";
	                $dbResult = $db->getArray($sql);
	                if ($contentDatum > $dbResult[0]['updatedate']) {
	                  $sql = "UPDATE ".$REX['TABLE_PREFIX']."template SET content='".mysql_escape_string($content)."' WHERE id='$templateId'";
	                  $db->setQuery($sql);
  	                if(mysql_affected_rows($db->identifier)>0){
	                      $this->generateTemplate($templateId,$content);
	                      //print "generated template db".$templateId."<br>";
	                  }
	                }
	            }
	        }
	    }
    }
    function generateTemplate($templateId){
        global $REX;

        $templatePathDeveloper = $this->livePath.$this->TemplatePath.$templateId.$this->TemplateExtension;
        $templatePathRedaxo = $REX['INCLUDE_PATH']."/generated/templates/".$templateId.".template";
        copy($templatePathDeveloper,$templatePathRedaxo);
    }
    function regenerateArticlesByModultypId($modules){
    	global $PHP_SELF, $module_id, $FORM, $REX_USER, $REX, $I18N;
    	include_once($REX[INCLUDE_PATH]."/clang.inc.php");
	    $modules = explode("__",$modules);
	    array_pop($modules);
	    $gc = new rex_sql;
	    foreach($modules as $modul_id){
	        $gc->setQuery("SELECT DISTINCT(".$REX['TABLE_PREFIX']."article.id) FROM ".$REX['TABLE_PREFIX']."article
	        LEFT JOIN ".$REX['TABLE_PREFIX']."article_slice ON ".$REX['TABLE_PREFIX']."article.id=".$REX['TABLE_PREFIX']."article_slice.article_id
	        WHERE ".$REX['TABLE_PREFIX']."article_slice.modultyp_id='$modul_id'");
	        for ($i=0; $i<$gc->getRows(); $i++)
	        {
	            rex_generateArticle($gc->getValue($REX['TABLE_PREFIX']."article.id"));
	            $gc->next();
	        }
	    }
    }
	function developer_setStatus($what='modules',$status=false){
	    global $REX;
	    $statusFile = $REX[ADDON][developer][live_edit_path]."status.inc.php";
	    $stat = $status == "true" ? "true" : "false";
	    $this->setConfigValue($statusFile,$what,$status);
	    if($what == "MODULES" && $stat == "true"){
	        $this->writeModuleFiles(true);
	    }
	    if($what == "TEMPLATES" && $stat == "true"){
	        $this->writeTemplateFiles(true);
	    }
	}
}
?>
Liebe Grüße,
Nicole

//Edit: Jetzt stimmt der Code. War wohl schon spät :-p
Zuletzt geändert von n.ruediger am 27. Jul 2007, 08:34, insgesamt 1-mal geändert.

ThomasKühne
Beiträge: 56
Registriert: 8. Dez 2006, 19:58

Nanu? Falscher Paste

27. Jul 2007, 01:40

Hallo Nicole!
Im letzten Post hast Du wohl einen falschen Code einkopiert.
Aber Danke für den davor! ;-)
Und Danke auch für den Hinweis in meinem anderen Thread!

lieben Gruß
Thomas

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

1. Aug 2007, 18:06

Hi,

könnte mir jemand von euch nochmal die aktuellsten Versionen der geänderten Dateien zuschicken, damit ich das ins CVS einspielen kann...?

Gruß,
Markus

Benutzeravatar
chekka
Beiträge: 14
Registriert: 12. Jan 2007, 10:36
Wohnort: München
Kontaktdaten: Website

1. Aug 2007, 20:06

kills hat geschrieben:die aktuellsten Versionen der geänderten Dateien zuschicken...?
http://www.chekka.de/transfer/classes.zip

Das ist das Letzte, was ich von Nicole bekommen
habe.

Bei mir funktioniert es auch soweit (natürlich
bis auf das bekannte Problem, dass sich das
Layout beim Template bearbeiten verschiebt
;-( http://forum.redaxo.de/ftopic6200.html).

Allerdings habe ich es bis jetzt auch noch nicht
intensiver testen könnnen.
Der erste Trunk aus dem Becher der
Naturwissenschaft macht atheistisch;
aber auf dem Grund des Bechers
wartet Gott.

Werner Heisenberg, *1901 - †1976
Physiknobelpreis 1932

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

2. Aug 2007, 11:42

Hi,

hab den Fix ins CVS eingespielt.

Part 1
Part 2

Gruß,
Markus

Benutzeravatar
n.ruediger
Beiträge: 405
Registriert: 21. Mär 2007, 12:25
Wohnort: Frankfurt (Oder)
Kontaktdaten: ICQ Website Yahoo Messenger

2. Aug 2007, 11:53

Hallo,

gerade auf die CVS-Einspielungen geschaut. Ist vollständig und zeigt das, was ich geändert hatte.

@chekka: vielleicht kannst du dich an dem anderen Thread beteiligen, dass wir das Problem lösen können (http://forum.redaxo.de/ftopic6200.html)?!

Liebe Grüße,
Nicole

iwerstler
Beiträge: 22
Registriert: 30. Mär 2007, 17:15

9. Nov 2007, 19:49

n.ruediger hat geschrieben:Hallo,

//Edit: Wozu man es braucht, ich weiß es auch nicht...

Ich hätte da eine Idee:

Ich versioniere meine Module und Templates gerne mit Subversion. Genauer genommen habe ich eine Master-Redaxo Installation, die in Subversion liegt. Von der mache ich Branches und darin wiederum habe ich gerne die Versionen von Templates/Modulen. Es ist einfach viel praktischer in Eclipse alles in einem Projekt vorzufinden, als immer per Copy/Paste zu arbeiten.

Dann arbeite ich noch auf 2 Maschinen: Laptop und stationärer Rechner. Ein simples svn up auf dem Laptop und alle Module/Templates sind auf dem gleichen Stand.

Und wenn man von einer lokalen Entwicklungsplattform nach Live deployed kann man ebenfalls mit svn up arbeiten, statt per copy/paste jedes Modul einzeln zu überarbeiten und zu hoffen, dass man nichts vergisst.

Wer natürlich immer am live-Objekt agiert und nie auf eine frühere version zurück muss, braucht das natürlich nicht ;-)

Was mich einzig noch stört ist, dass man anhand der Modulnummer nicht weiß um welches Modul/Tenmplate es sich handelt.... hmhmhm ... vielleicht schreib ich da mal einen Patch.

Gruß
Ingo

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

9. Nov 2007, 22:13

Hi Ingo,

das ist wohl eine der professionellen Arten wie man REDAXO einsetzt. Die meisten machen dass aber nicht so, da sie meist technisch nicht so versiert sind.

Vielleicht könntest du über deine Vorgehensweise einen Artikel im Wiki verfassen? Dann könnten auch andere ein wenig professionalität "abkupfer". Das erleichtert auch unseren Support, da man immer Backups hat etc..

Würd mich sehr freuen.

Viele Grüße,
Markus

Benutzeravatar
darwin
Beiträge: 1725
Registriert: 2. Jan 2007, 17:10
Wohnort: LA

26. Feb 2008, 11:41

Hi@all,

möchte den Thread hier nochmal pushen, da die Vorgehensweise von iwerstler
doch sehr interessant ist. Wäre echt klasse wenn du entweder hier oder
im Wiki kurz deine Arbeitsweise, bzw. Tools die du verwendest
(ggf. mit Link), beschreiben könntest.

Danke schonmal. grz. Chris.

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

17. Apr 2008, 10:14

iwerstler hat geschrieben:
n.ruediger hat geschrieben: Was mich einzig noch stört ist, dass man anhand der Modulnummer nicht weiß um welches Modul/Tenmplate es sich handelt.... hmhmhm ... vielleicht schreib ich da mal einen Patch.
das wünsche ich mir auch schon seit jahren.. ;)

die vorgehensweise mit svn up würde mich auch interessieren. ich arbeite mit aptana. falls man dort auch sowas integrieren könnte, wäre ich begeistert.

Zurück zu „Allgemeines [R3]“