Theme klonen in D7
Eingetragen von mv_alex (54)
am 28.04.2011 - 12:52 Uhr in
am 28.04.2011 - 12:52 Uhr in
Hallo zusammen,
in einer D7-Installation habe ich versucht, eine Kopie des Themes "busy" anzulegen, um testweise ein wenig daran zu verändern.
Nach Hagen Grafs Buch für D6 müsste das relativ einfach gehen - Ordner duplizieren und die theme.info anpassen. In meiner D7-Website wird das geklonte Theme aber leider nicht gefunden/erkannt.
Was muss ich bei diesem Vorgehen unter D7 besonders beachten?
Danke für jeden Tipp!
Gruß Alex
- Anmelden oder Registrieren um Kommentare zu schreiben
wie in D6
am 28.04.2011 - 23:05 Uhr
Das sollte so laufen wie in D6. Haben bei dir Ordner und Datei denselben Namen? Etwa "/busycopy" für den Ordner und busycopy.info für die Datei.
Namenskonventionen
am 29.04.2011 - 06:35 Uhr
Ja, haben sie.
Was mir aber gerade einfällt: Dürfen die Namen vielleicht keinen Bindestrich enthalten?
_ statt -
am 29.04.2011 - 15:24 Uhr
Dann wird es daran liegen, siehe http://drupal.org/node/171205
The name should start with an alphabetic character, can contain numbers and underscores, but not hyphens, spaces or punctuation.
Fehlermeldungen
am 29.04.2011 - 16:50 Uhr
Danke für den Hinweis!! Ohne Bindestrich im Namen werden die Duplikate nun erkannt.
Zwei andere Fehlermeldungen sind mir nun aufgefallen;
1.
Fehler beim Prüfen von Daten über verfügbare Aktualisierungen für 2 Projekte.
Denke, das kommt hierher:
; Information added by drupal.org packaging script on January 1, 1970 - 00:00
version = "7.x-1.4"
core = "7.x"
project = "busyclone"
datestamp = "1296563828"
Schließlich gibt es ja kein Projekt "busyclone". Kann der Abschnitt aus der info-Datei entfernt werden?
2.
Notice: Undefined variable: site_name_and_slogan in include() (Zeile 10 von /www/htdocs/user/WEB/sites/all/themes/busyclone/templates/page.tpl.php).
Gleiches nochmal für Zeile 12.
Dies passiert scheinbar, wenn ich Sonderzeichen wie "!" oder "&" in "Name der Website" oder "Slogan" verwende. Darf man das grundsätzlich nicht oder ist das Problem themespezifisch?
Danke&Gruß
Alex
Link lesen
am 29.04.2011 - 17:20 Uhr
In meinem Link steht doch, was die minimalen Anforderungen sind: http://drupal.org/node/171205
In der .info muss nicht viel drin stehen
Und wg. 2: Du kannst mal versuchen, die Datei als "UTF8 ohne BOM" zu speichern, vielleicht reicht das schon. Hab es nicht ausprobiert.
Hab ich ;)
am 29.04.2011 - 17:34 Uhr
In den Beispieldateien unter dem Link (z.B. angepasstes Garland) stehen genau diese Einträge noch drin ("project = drupal"). Daher frag ich lieber noch mal, bevor ich blind lösche. ;)
Ad 2.: Welche Datei genau meinst Du? Das Theme hab ich direkt über die Drupal-Oberfläche installiert, also nicht mit einem Editor bearbeitet etc. Und die Sonderzeichen kommen ursprünglich aus Verwaltung » Konfiguration » System - "Website-Informationen".
Gruß Alex
Editor
am 29.04.2011 - 18:20 Uhr
Ich meine die .info. Die Datei bearbeitest du doch mit einem Editor, oder? In dem meisten kann man die Datei dann im Format "UTF8 ohne BOM" abspeichern. Das erhält Sonderzeichen, ich weiß nur nicht mehr, ob Drupal die Datei dann noch verarbeitet, ich glaube aber, dass das so war.
Online-Editor
am 29.04.2011 - 19:09 Uhr
Ach Sorry, da stand ich jetzt auf dem Schlauch.
Ich bearbeite die Dateien nicht lokal sondern via WebFTP mit integriertem ACE Editor. Und der scheint tatsächlich beim Öffnen alle Dateien stets ins ISO-Format umzuwandeln, was ganz schön unpraktisch ist.
Nach Ändern auf UTF-8 seh ich im Augenblick keine Fehlermeldungen mehr. Werde das mal im Auge behalten.
Herzlichen Dank für Deine Hilfe!
Gruß Alex
Fehlermeldungen
am 30.04.2011 - 18:29 Uhr
Leider zu früh gefreut! :(
Die Fehlermeldungen sind wieder da. Die Dateien sind aber inzwischen als UTF-8 abgespeichert.
* Notice: Undefined variable: site_name_and_slogan in include() (Zeile 10 von /www/htdocs/user/WEB/sites/all/themes/busyclone/templates/page.tpl.php).
* Notice: Undefined variable: site_name_and_slogan in include() (Zeile 12 von /www/htdocs/user/WEB/sites/all/themes/busyclone/templates/page.tpl.php).
Passiert jedes Mal, wenn ich im Seitentitel ein "!" verwende.
In der page.tpl.php steht an diesen Stellen
<a href="<?php print $front_page ?>" title="<?php print $site_name_and_slogan ?>">
(...)
<img src="<?php print $logo ?>" alt="<?php print $site_name_and_slogan ?>" id="logo" />
Also scheint es irgendwie mit dem Titel zusammenzuhängen. Ich hab schon versucht, das Ausrufezeichen als HTML-Entity einzugeben - leider taucht das dann an anderer Stelle auch so auf.
Seltsamerweise passiert das Ganze nicht beim Originaltheme.
Hat noch jemand eine Idee, wo der Fehler liegen könnte?
Danke&Gruß
Alex
Sieh Dir mal die Funktion
am 30.04.2011 - 18:44 Uhr
Sieh Dir mal die Funktion preprocess_page in der template.php Datei an. Vielleicht geht ja da etwas in der Syntax kaputt, wenn die Variable gefüllt werden soll.
Beste Grüße
Werner
wieder utf8
am 30.04.2011 - 18:47 Uhr
Dann versuch mal, die page.tpl.php ebenso als UTF8 zu speichern.
(Ich lege meine Template-Files immer automatisch als UTF8 an und hatte mit den Sonderzeichen noch keine Probleme.)
Ratlos
am 30.04.2011 - 19:42 Uhr
Vielen Dank für Eure Antworten!
Dann versuch mal, die page.tpl.php ebenso als UTF8 zu speichern.
Das hatte ich schon, hab es jetzt zur Sicherheit nochmals überprüft. Alle Dateien des Theme-Clones sind als UTF-8 gespeichert.
Die erwähnte Funktion sieht so aus:
/**
* Override or insert variables into the page template.
*/
function busy_preprocess_page(&$vars) {
// Prepare header.
$site_fields = array();
if (!empty($vars['site_name'])) {
$site_fields[] = check_plain($vars['site_name']);
}
if (!empty($vars['site_slogan'])) {
$site_fields[] = check_plain($vars['site_slogan']);
}
$vars['site_title'] = implode(' ', $site_fields);
if (!empty($site_fields)) {
$site_fields[0] = '<span>' . $site_fields[0] . '</span>';
}
$vars['site_html'] = implode(' ', $site_fields);
// Set a variable for the site name title and logo alt attributes text.
$slogan_text = filter_xss_admin(variable_get('site_slogan', ''));
$site_name_text = filter_xss_admin(variable_get('site_name', 'Drupal'));
$vars['site_name_and_slogan'] = $site_name_text . ' ' . $slogan_text;
}
Genau wie im Original, an der Datei habe ich nichts geändert.
Seltsam ist außerdem der Effekt, dass beim ersten Aufruf der Seite (nach Bearbeiten der Dateien und Speichern als UTF-8) keine Fehlermeldung erscheint, aber nach einfachem Reload schon, und dann permanent.
Bin etwas ratlos!
Gruß Alex
Bei genauerer Betrachtung
am 02.05.2011 - 12:49 Uhr
Bei genauerer Betrachtung tritt der Fehler beim ersten Betreten der Seite (hab ich mit unterschiedlichen Browsern getestet) nicht auf. Erst bei einem Reload erscheint dann die Meldung.
Würde es an der falschen Codierung liegen, müsste der Fehler doch jedesmal auftreten, oder?
Könnte der Fehler vielleicht irgendwo im Seitencache liegen?
Gruß Alex
Cache
am 02.05.2011 - 13:30 Uhr
Könnte der Fehler vielleicht irgendwo im Seitencache liegen?
Wer weiß, hast du mal den Cache komplett gelöscht?
Falls immer noch
Notice: Undefined variable: site_name_and_slogan in include() (Zeile 10 von /www/htdocs/user/WEB/sites/all/themes/busyclone/templates/page.tpl.php).
erscheint: Hast du dir mal die page.tpl.php angesehen? Vielleicht gibt es da schlicht diesen Fehler. Also einmal die Stelle suchen und auskommentieren.
Den Cache hab ich mehrfach
am 02.05.2011 - 15:57 Uhr
Den Cache hab ich mehrfach gelöscht, das hilft nicht.
Den betroffenen Quelltext der page.tpl.php
<a href="<?php print $front_page ?>" title="<?php print $site_name_and_slogan ?>">
<?php if ($logo): ?>
<img src="<?php print $logo ?>" alt="<?php print $site_name_and_slogan ?>" id="logo" />
<?php endif; ?>
hab ich mal testweise rausgenommen.
Ergebnis: Keine Fehlermeldungen, aber auch kein Logo und kein Seitentitel mehr.
Gruß Alex
Existenz
am 02.05.2011 - 16:59 Uhr
Als du das Theme kopierst hast, hast du die template.php mitkopiert? Vermutlich wird dort die Variable erzeugt, auf die die page.tpl.php zugreifen will.
Ersetze die Stelle doch mal durch:
<a href="<?php print $front_page ?>" title="<?php print $site_name ?>">
<?php if ($logo): ?>
<img src="<?php print $logo ?>" alt="<?php print $site_name ?>" id="logo" />
<?php endif; ?>
Code-Injections
am 03.05.2011 - 14:00 Uhr
Als du das Theme kopierst hast, hast du die template.php mitkopiert? Vermutlich wird dort die Variable erzeugt, auf die die page.tpl.php zugreifen will.
Ja, hab ich auch kopiert. Ist auch UTF-8 ;)
Mit Deinem Snippet erscheint die Fehlermeldung nicht mehr!
Wenn die Datei so eine Art Preprocessor ist, könnte der Fehler ja hierher kommen:
#
function busy_preprocess_page(&$vars) {
// Prepare header.
$site_fields = array();
if (!empty($vars['site_name'])) {
$site_fields[] = check_plain($vars['site_name']);
}
if (!empty($vars['site_slogan'])) {
$site_fields[] = check_plain($vars['site_slogan']);
}
$vars['site_title'] = implode(' ', $site_fields);
if (!empty($site_fields)) {
$site_fields[0] = '<span>' . $site_fields[0] . '</span>';
}
$vars['site_html'] = implode(' ', $site_fields);
// Set a variable for the site name title and logo alt attributes text.
$slogan_text = filter_xss_admin(variable_get('site_slogan', ''));
$site_name_text = filter_xss_admin(variable_get('site_name', 'Drupal'));
$vars['site_name_and_slogan'] = $site_name_text . ' ' . $slogan_text;
}
Ich bin jetzt nicht _der_ PHP-Spezialist, aber hier scheint mir auch eine Sperre gegen Code-Injections zu greifen.
Könnte man die an dieser Stelle gefahrlos "übergehen" oder muss ich dann an anderer Stelle Probleme befürchten?
Gruß Alex
Variable
am 03.05.2011 - 14:23 Uhr
Hallo.
Du musst die Funktionen in der template.php auch noch umbenennen. Aktuell steht dort noch "function busy_preprocess_page(&$vars) { ... }", das muss bei Dir dann jedoch "busyclone_preprocess_page" heissen.
Auch bei den anderen Funktionen musst Du "busy" durch "busyclone" ersetzen.
Ansonsten wird die Funktion in Deinem Theme nicht aufgerufen und somit auch die Variable nicht erstellt. Das resultiert dann in dem von Dir beschriebenen Fehler.
hth,
Stefan
Dein Theme heißt doch
am 03.05.2011 - 14:29 Uhr
Dein Theme heißt doch busyclone!! Also muß die Funktion auch busyclone_preprocess_page heißen. Die wird deshalb auch gar nicht angesprungen und daher die Variable nicht gesetzt. Beim Kopieren der template.php müssen die Funktionsnamen an den Namen des neuen Themes angepaßt werden.
Beste Grüße
Werner
P.S. Da war der Stefan schneller :-)
Holzauge sei wachsam
am 03.05.2011 - 16:12 Uhr
Vielen Dank für diesen Hinweis! Da wäre ich wohl nie drauf gekommen.
Allerdings bringt es leider nicht die Lösung. Ich habe alle Funktionsnamen in der template.php an "busyclone" angepasst. Aber die Fehlermeldungen bestehen unverändert fort. Und wenn die Variable leer bliebe, dürfte doch auch kein Seitentitel erscheinen, oder?
Eine andere Idee: Ich habe auch eine Theme-bezogene Fehlermeldung beim Einsatz des Moduls Domain Access. Könnte hier vielleicht ein Zusammenhang bestehen?
Gruß Alex
Cache
am 04.05.2011 - 07:59 Uhr
Hast Du den Theme-Cache geleert?
Mach doch mal in der Funktion
busyclone_preprocess_page
eine Debug-Ausgabe per [api:drupal_set_message]. Dann siehst Du, ob die Funktion ausgeführt wird.Domain & Cache
am 04.05.2011 - 19:57 Uhr
Ad 2: Scheinbar reicht mein PHP-Verständnis hier nicht - ich seh nur Parse-Errors. ;)
Ad 1: Offenbar nicht! Zwar hatte ich über Verwaltung » Konfiguration » Entwicklung mehrfach den Cache gelöscht (und dachte, das schließt das Theme mit ein); aber nachdem ich ihn jetzt mal vollständig deaktiviert hab, sind die Fehler erst mal verschwunden. Und plötzlich seh ich auch zwei verschiedene Themes, je nach gewählter Domain.
Es gibt nämlich zwei Domains, je einer soll ein eigener Busyclone zugeordnet werden. Grundsätzlich klappt das, denn ich sehe unterschiedliche header_bg_building.jpg. Aber obwohl ein Theme auf s/w und das andere auf grün eingestellt ist, erscheinen beide in s/w.
Irgendwas hakt da also noch.
Gruß Alex
Nachtrag
am 05.05.2011 - 12:41 Uhr
Ich vermute, dass dies mit den Batch-Aktualisierungen des Moduls Domain Access zusammenhängt. Nachdem dort wieder die bekannte Fehlermeldung erschien, klappte das auch mit dem Themes nicht mehr.
Als ich diese dann wieder händisch zugewiesen hatte (nach Einloggen von der jeweils betroffenen Domain aus, das scheint entscheidend zu sein!), wurden sie wieder richtig dargestellt. Also lass ich da jetzt die Finger von und hoffe, dass die Probleme nicht wieder auftauchen. ;)
Daher jetzt eine ganz andere Frage: Mit dem originalen Busy-Theme scheinen sich ja sehr unterschiedliche Darstellungen erreichen zu lassen, wenn ich mir die Screenshots z.B. zur D8-Core-Integration so anschaue. Besonders interessant finde ich die Anpassung des Headers in Höhe und Spaltenanzahl.
Kann man diese Anpassungen innerhalb von Drupal realisieren, z.B. mit Panels, oder muss man direkt an die Templates und Stylesheets gehen?
Danke & Gruß
Alex