Page 1 of 1

Fehler in PHPLayers führt gelegentlich zu JS Konflikten

Posted: Tue Jun 14, 2005 7:28 am
by piratos
Wer PHP - Layers nicht als TAG in ein Template oder eine Seite einbindet, der stellt bei Ansicht des dargestellten Quellcodes einer Seite fest, das dennoch PHPLayers - Bestandteile in einer Seite enthalten sind.

Das kann gelegentlich zu problemen mit anderen Modulen führen, die ebenfalls Javascript einsetzen.

Ursache ist, das auch ohne TAG Header und Footer - Informationen von PHPLayers eingefügt werden (die in dem Moment ja überhaupt keiner braucht).

Durch eine einfache Änderung ist das Problem zu beheben:

Code: Select all

if (eregi('\{cms_module module=[\"\']?phplayers[\"\']?', $content))
		{

		$content = ereg_replace('</__body>', '</__body>' . $_SESSION['layersmenuobj']->getHeader(), $content);
		$content = ereg_replace('<__body>', $_SESSION['layersmenuobj']->getFooter() . '<__body>' , $content);
                }

PS. Habe den Fehler und die Lösung bei den Bugs gemeldet.

Re: Fehler in PHPLayers führt gelegentlich zu JS Konflikten

Posted: Sat Jun 18, 2005 10:51 am
by piratos
Achtung  - die gezeigte Änderung funktioniert radikal aber nicht so wie es erwünscht war. Ursache dieser Falschmeldung war wohl Cache - Informationen.

Wishy hat das auch nicht gemerkt und die Änderung in die Daily aufgenommen, mit dem Effekt, dass Anwender der Daily prompt ein Problem hatten.

Der Vorschlag konnte nicht funktionieren, weil  die Funktion ContentPreRender den PHPLayer - Tag bereits entfernt und somit in ContentPostRender die Information fehlte.

Dennoch kann es nicht sein, dass PHPLayers Informationen in den Inhalt schreibt, auch wenn es nicht eingesetzt wird.

Die Lösung - Einfügung einer Signatur in die Funktion ContentPreRender, wenn das Modul verwendet wird und Entfernung der Signatur mit ContentPostRender.


Und so funktioniert es :

1. Änderung

Code: Select all

class PHPLayers extends CMSModule
{       var $sample='i8qvyz';
2. Änderung

Code: Select all

	function ContentPreRender(&$content)
	{
		global $gCms;

		if (eregi('\{cms_module module=[\"\']?phplayers[\"\']?', $content))
		{
			$config = $this->cms->config;
			$text = '<__script__ language="JavaScript" type="text/javascript" src="'.$config['root_url'].'/modules/PHPLayers/phplayers/libjs/layersmenu-browser_detection.js"></__script>' . "\n" .
			'<__script__ language="JavaScript" type="text/javascript" src="'.$config['root_url'].'/modules/PHPLayers/phplayers/libjs/layersmenu-library.js"></__script>' . "\n".
			'<__script__ language="JavaScript" type="text/javascript" src="'.$config['root_url'].'/modules/PHPLayers/phplayers/libjs/layerstreemenu-cookies.js"></__script>' . "\n".
			'<__script__ language="JavaScript" type="text/javascript" src="'.$config['root_url'].'/modules/PHPLayers/phplayers/libjs/layersmenu.js"></__script>' . "\n";
                        $content =$this->sample. ereg_replace("<\/head>", $text."</head>", $content);

		}
	}

	function ContentPostRender(&$content)
	{
		global $gCms;

                if (ereg($this->sample, $content))
                {
		$content = ereg_replace('</__body>', '</__body>' . $_SESSION['layersmenuobj']->getHeader(), $content);
		$content = ereg_replace('<__body>', $_SESSION['layersmenuobj']->getFooter() . '<__body>' , $content);
                $content = ereg_replace($this->sample,'',$content);

		}
	}
Damit sind sicher alle unnützen Eintragungen von PHPLayers verschwunden, wenn man PHPLayers installiert hat aber nicht einsetzt.

Nachsatz: In der Daily vom 19.6. hat Wishy das Problem erledigt.