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.
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/
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/
- 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
Hej,
vg Thomas
Ohne es angesehen zu haben, vermute ich, dass du in der config die regex anpassen musst.chekka hat geschrieben:Wenn ja, bitte schnell überarbeiten oder Hilfe geben, damit es wieder funktioniert.
Warum? Welchen plausiblen Grund gibt es, es mit in den Kern aufzunehmen?chekka hat geschrieben:Eigentlich sollte diese Funktion ohnehin als fester Bestandteil in redaxo aufgenommen werden.
vg Thomas
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?Warum? Welchen plausiblen Grund gibt es, es mit in den Kern aufzunehmen?
In jedem Fall: Danke für Deine schnelle Antwort.
gruß,
der chekka
- n.ruediger
- Beiträge: 405
- Registriert: 21. Mär 2007, 12:25
- Wohnort: Frankfurt (Oder)
- Kontaktdaten: ICQ Website Yahoo Messenger
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:
Liebe Grüße,
Nicole
//Edit: Wozu man es braucht, ich weiß es auch nicht...
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 ";
$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 ";
$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;
}
}
?>
Nicole
//Edit: Wozu man es braucht, ich weiß es auch nicht...
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
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
- n.ruediger
- Beiträge: 405
- Registriert: 21. Mär 2007, 12:25
- Wohnort: Frankfurt (Oder)
- Kontaktdaten: ICQ Website Yahoo Messenger
Rechte sind auf 777.Hast du denn die Schreibrechte für den Ordner und die Datei gesetzt?
Was mir da gerade noch aufgefallen ist:
Die Templates werden im »live_edit/templates« ordner angelegt, die Module leider nicht!
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!!!P.S.: Ich kopier mir den Code einfach in mein Editor, bearbeite ihn und kopiere ihn zurück...
grüße!
- Ruediger.Nitzsche
- Beiträge: 2117
- Registriert: 13. Dez 2005, 09:29
- Wohnort: Coburg
- Kontaktdaten: Website
Aus dem Grund haben wir das Templatesystem von Redaxo für uns angepasst und ausgelagert, ist aber alles Geschmackssache.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!!!
Rüdiger
gn2 netwerk | gn2 hosting | REDAXO Referenzen | Github
Supportanfragen per PN werden gepflegt ignoriert
Supportanfragen per PN werden gepflegt ignoriert
- n.ruediger
- Beiträge: 405
- Registriert: 21. Mär 2007, 12:25
- Wohnort: Frankfurt (Oder)
- Kontaktdaten: ICQ Website Yahoo Messenger
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?chekka hat geschrieben: Was mir da gerade noch aufgefallen ist:
Die Templates werden im »live_edit/templates« ordner angelegt, die Module leider nicht!
Liebe Grüße,
Nicole
Ich komme gerade wegen eines Auftrags nicht dazu.... oder soll ich mir das noch mal genauer ansehen?
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
Naturwissenschaft macht atheistisch;
aber auf dem Grund des Bechers
wartet Gott.
Werner Heisenberg, *1901 - †1976
Physiknobelpreis 1932
- Thomas.Blum
- Entwickler
- Beiträge: 5063
- Registriert: 24. Aug 2004, 22:11
- Wohnort: Dresden
- Kontaktdaten: Website
Ich hatte echt noch nie Schwierigkeiten damit, ehrlich!... so dass es passieren konnte, dass die Templates sich gegenseitig überschrieben hatten.
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
Naturwissenschaft macht atheistisch;
aber auf dem Grund des Bechers
wartet Gott.
Werner Heisenberg, *1901 - †1976
Physiknobelpreis 1932
- n.ruediger
- Beiträge: 405
- Registriert: 21. Mär 2007, 12:25
- Wohnort: Frankfurt (Oder)
- Kontaktdaten: ICQ Website Yahoo Messenger
Hallo,
hier die Anpassung für die Datei "class.live_edit.inc.php" um auch die Module bearbeiten zu können.
Liebe Grüße,
Nicole
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);
}
}
}
?>
Nicole
- n.ruediger
- Beiträge: 405
- Registriert: 21. Mär 2007, 12:25
- Wohnort: Frankfurt (Oder)
- Kontaktdaten: ICQ Website Yahoo Messenger
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.
Liebe Grüße,
Nicole
//Edit: Jetzt stimmt der Code. War wohl schon spät :-p
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);
}
}
}
?>
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.
-
- Beiträge: 56
- Registriert: 8. Dez 2006, 19:58
Nanu? Falscher Paste
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
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
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
http://www.chekka.de/transfer/classes.zipkills hat geschrieben:die aktuellsten Versionen der geänderten Dateien zuschicken...?
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
Naturwissenschaft macht atheistisch;
aber auf dem Grund des Bechers
wartet Gott.
Werner Heisenberg, *1901 - †1976
Physiknobelpreis 1932
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
- n.ruediger
- Beiträge: 405
- Registriert: 21. Mär 2007, 12:25
- Wohnort: Frankfurt (Oder)
- Kontaktdaten: ICQ Website Yahoo Messenger
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
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
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
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
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
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
das wünsche ich mir auch schon seit jahren..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.
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.