Fehler in PHPLayers führt gelegentlich zu JS Konflikten

Hilfe zu Modulen und Tags
Post Reply
piratos

Fehler in PHPLayers führt gelegentlich zu JS Konflikten

Post 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.
piratos

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

Post 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.
Last edited by piratos on Sun Jun 19, 2005 1:04 pm, edited 1 time in total.
Post Reply

Return to “Module und Tags”