Hallo, habe eine Frage, die Antwort hatte ich nach paar Stunden nicht finden können.
Wenn man Module schreibt benutzt man CSS Definitionen und gelegentlich Javascripte im Output. Man kann zwar die Scripte ohne nennensswerten Problemme im Ausgabeberiench des Moduls selbst ausgeben ohne dass Browser und W3C meckern. Die CSS Definitionen müssen aber auf jeden Fall im Header der Seite stehen.
Meine Frage deshalb, gibt es eine Möglichkeit dass ein Modul bestimmte Quelltexte (JS, CSS oder andere Metadaten) im Headerbereich des Layouts registrieren lässt. Dadurch würden nur die CSS Definitionen im Header aufgeführt oder verlinkt die auf der Seite tatsächlich verwendet werden.
Sonst bliebe nur die Möglichkeit, mehrere Layouts anzulegen die unterschiedliche CSS Dateien verlinken, im Rest aber gleich sind. Meine format.css kommt bald auf die 30 kb und enthält unter anderem Definitionen für ein Suchmodul das nur auf einer Seite steht.
Hoffe ist klar was ich da meine,
Mfg, Edward.
Scripte und CSS im Header Registrieren
hmm...
intressante idee,
gibts aber nicht direkt innerhalb von contenido...
ich glaube ich hab da aber mal ein modul im forum gesehen, das stylesheets im header nachläd. könnte dann via konfiguration pro kategorie oder seite eingestellt werden.
leider weiss ich nicht mehr wie das modul geheissen hat.
intressante idee,
gibts aber nicht direkt innerhalb von contenido...
ich glaube ich hab da aber mal ein modul im forum gesehen, das stylesheets im header nachläd. könnte dann via konfiguration pro kategorie oder seite eingestellt werden.
leider weiss ich nicht mehr wie das modul geheissen hat.
*** make your own tools (wishlist :: thx)
Danke für die shcnelle Antwort 
Wenn ich nichts in der Richtung finde, versuche ich es auch so machen,
habe mir schon überlegt das über ein Modul im Header zu berwerkstelligen, wäre da ein Problem dass beim ersten Anzeigen des Editors die Zusathmetadaten leer sind. Konfiguration ist der richtige Lösungsansatz, weil dann die Daten schon vor dem Editor geschrieben sind
MfG, Edward
EDIT
Danke für die Richtungsweisung emergence, habe mit den Stichworten das Modul schließlich finden können:
http://www.contenido.org/forum/viewtopic.php?t=7277
Gruss, Edward

Wenn ich nichts in der Richtung finde, versuche ich es auch so machen,
habe mir schon überlegt das über ein Modul im Header zu berwerkstelligen, wäre da ein Problem dass beim ersten Anzeigen des Editors die Zusathmetadaten leer sind. Konfiguration ist der richtige Lösungsansatz, weil dann die Daten schon vor dem Editor geschrieben sind

MfG, Edward
EDIT
Danke für die Richtungsweisung emergence, habe mit den Stichworten das Modul schließlich finden können:
http://www.contenido.org/forum/viewtopic.php?t=7277
Gruss, Edward
Ist auch eine gute Möglichkeit
Dummerweise habe ich hier nicht sofort nach der Aufgabenstellung danach gefragt und hatte genug Zeit mir einzureden, ich würde eine automatische Registrierung von Codes brauchen
Daher hatte ich mich doch noch hingesetzt und... Das ist die Lösung die meinem Vorhaben näherkommt, Also:
Wie in der Beschreibung steht, muss das Modul im Headbereich stehen. Die Module die ihr Code dort haben wollen müssen im Input die Funktion registerMetaCode() aufrufen, zB so:
Dabei passiert folgendes: Das MetaCode Modul erzeugt daraufhin ein JS-Code, das beim Anzeigen der Konfigurationsseite das Variablenfeld um dieses Codeblock erweitert. Am Ende braucht man nur die Konfiguration mit der fertig aufgebauten Sequenz abzuspeichern.
Vor dem Aufbau des JS wird aber geprüft ob ein ännlicher Code-Eintrag bereits vorliegt (Dublette), wenn ja wird die Registrierung verweigert. Ännlichkeit: Bis auf Leer- und Steuerzeichen und unbeachtet Groß/Kleinschreibung. Die Semantik wird nicht geprüft: Vertauscht man in der obigen Zeile rel="stylesheet" und type="text/css", wird die Ännlichkeit nicht erkannt, bitte daher einheitlich schreiben
Je nach dem wie die Variable $PrintModulname gesetzt ist wird vor dem Codeblock ein Kommentar mit dem Modulname ausgegeben, das das Code registriert hat: Bei TRUE und bei FALSE
Eingestellt ist TRUE (erste Variante), damit ist erkennbar wer das falsche Code registriert hat, wer aber nichts verraten will kann auschalten.
Mehrzeilige Codes sind möglich, zB das würde zur entsprechenden (bedingt sinnvollen) Ausgabesequenz führen:
Was noch, wenn in einem Modul die Registrierung ein- oder umgebaut wurde, muss die Seite wo es steht bzw. die Kategorie neu konfigureirt werden, sonst bleibt das alte Code erhalten. So etwas wie unregisterMetaCode() gibt es nicht weil sobald die Konfigurationsseite angezeigt wird, wird die aktuelle Codesequenz aufgebaut, wurde ein Modul entfernt wird das von ihm registriere Code ebenfalls entfernt, vorausgesetzt man speichert die Konfiguration ab.
Getestet mit IE und 4.4.4
Viel Spass damit.
Edward

Dummerweise habe ich hier nicht sofort nach der Aufgabenstellung danach gefragt und hatte genug Zeit mir einzureden, ich würde eine automatische Registrierung von Codes brauchen

Daher hatte ich mich doch noch hingesetzt und... Das ist die Lösung die meinem Vorhaben näherkommt, Also:
Code: Alles auswählen
/***********************************************
*
* CONTENIDO-MODUL INPUT
*
* MetaCode
*
* Ermöglicht das registrieren eigener Codeblöcke im Headbereich des Layouts
* Das Modul definiert im Inputbereich die Methode registerMetaCode()
* welche die Codeblöcke in einer Cms Variable (CMS_VAR[1])
* als Textsequenz abspeichert.
* Im Outputbereich wird die gespeicherte Sequenz ausgegeben, das Modul muss
* daher im Headbereich stehen um die Sequenz ebendort einfügen zu können.
*
* Version 1.1.3
* Author Edward Fondis
* Created 16.05.2004
*/
// ========== Anpassung =========================
//Modulname vor der Codesetzung ausgeben
$PrintModulname = TRUE;
// ========== Datensammlung =====================
$MetaCodes = array();
// ========== Jawascript zum beschreiben ========
function registerMetaCode($MetaCode) {
global $MetaCodes, $db, $PrintModulname;
//Auf Dubletten prüfen
$metacode = strtolower(str_replace(array("\n", "\r", "\t", "\v"), ' ', $MetaCode));
if (in_array($metacode, $MetaCodes)) return FALSE;
$MetaCode = trim($MetaCode);
//Zur späteren Prüfung aufnehmen
$MetaCodes[] = $metacode;
//Name das registrierenden Modul, hinzufügen.
if ($PrintModulname) {
$Modulname = $db->Record["name"];
$MetaCode = "<!-- $Modulname -->\n" . $MetaCode;
}
//$MetaCode umformen
$MetaCode = htmlspecialchars($MetaCode, ENT_QUOTES);
$MetaCode = str_replace("\r\n", '\\r\\n', $MetaCode);
$MetaCode = str_replace("\r", '\\r', $MetaCode);
$MetaCode = str_replace("\n", '\\n', $MetaCode);
echo '
<script type="text/javascript">
document.getElementById("MetaCodeArea").value += \''. $MetaCode .'\n\';
</script>';
}
//=========== Ausgabe ===========================
//Die Codesequenz wird zunächst leer voreingestellt..
echo '
<table cellspacing="0" cellpadding="0" border="0" style="width:100%">
<tr><td><input type="hidden" name="CMS_VAR[1]" id="MetaCodeArea" value=""></td></tr>
</table>';
Code: Alles auswählen
<?php
/***********************************************
*
* CONTENIDO-MODUL OUTPUT
*
* MetaCode
*
* Version 1.1.3
* Author Edward Fondis
* Created 16.05.2004
*/
// ========== Datensammlung =====================
$MetaCode = trim ('CMS_VALUE[1]');
$MetaCode = html_entity_decode($MetaCode, ENT_QUOTES);
//=========== Ausgabe ===========================
echo "
<!-- MetaCode Insertion (ver 1.1) -->
$MetaCode
<!-- End MetaCode Insertion -->\n";
?>
Code: Alles auswählen
/***********************************************
* CONTENIDO-MODUL INPUT
* Text (HTML)
*/
registerMetaCode('<link rel="stylesheet" type="text/css" href="css/text.css">');
Vor dem Aufbau des JS wird aber geprüft ob ein ännlicher Code-Eintrag bereits vorliegt (Dublette), wenn ja wird die Registrierung verweigert. Ännlichkeit: Bis auf Leer- und Steuerzeichen und unbeachtet Groß/Kleinschreibung. Die Semantik wird nicht geprüft: Vertauscht man in der obigen Zeile rel="stylesheet" und type="text/css", wird die Ännlichkeit nicht erkannt, bitte daher einheitlich schreiben

Je nach dem wie die Variable $PrintModulname gesetzt ist wird vor dem Codeblock ein Kommentar mit dem Modulname ausgegeben, das das Code registriert hat: Bei TRUE
Code: Alles auswählen
<!-- MetaCode Insertion (ver 1.1) -->
<!-- Newsliste -->
<link rel="stylesheet" type="text/css" href="css/news.css">
<!-- NeustArt -->
<link rel="stylesheet" type="text/css" href="css/neustart.css">
<!-- Headline (HTML) -->
<link rel="stylesheet" type="text/css" href="css/headlines.css">
<!-- Text (HTML) -->
<link rel="stylesheet" type="text/css" href="css/text.css">
<!-- End MetaCode Insertion -->
Code: Alles auswählen
<!-- MetaCode Insertion (ver 1.1) -->
<link rel="stylesheet" type="text/css" href="css/news.css">
<link rel="stylesheet" type="text/css" href="css/neustart.css">
<link rel="stylesheet" type="text/css" href="css/headlines.css">
<link rel="stylesheet" type="text/css" href="css/text.css">
<!-- End MetaCode Insertion -->
Mehrzeilige Codes sind möglich, zB das
Code: Alles auswählen
registerMetaCode('
<style type="text/css">
p {font-size: 11px;}
</style>
');
registerMetaCode('
<script type="text/javascript">
<!--
alert("Hallo Welt!");
//-->
</script>
');
Code: Alles auswählen
<!-- MetaCode Insertion (ver 1.1) -->
...
<!-- Login -->
<style type="text/css">
p {font-size: 11px;}
</style>
<!-- Login -->
<script type="text/javascript">
<!--
alert("Hallo Welt!");
//-->
</script>
...
<!-- End MetaCode Insertion -->
Getestet mit IE und 4.4.4
Viel Spass damit.
Edward