Drupal CSS auf externer PHP-Seite laden

am 13.03.2012 - 16:47 Uhr in
Hallo,
ich möchte in einem Unterordner mit Hilfe von PHP eine einfache Drupal-Seite (D6) aufbauen.
Dafür dient mir folgender, fast funktionierender Code in einer Datei namens "sites/all/exec/test.php":
<?php
chdir('../../..');
require_once "./includes/bootstrap.inc";
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
?>
<!DOCTYPE html>
<html>
<head>
<?php print $head; ?>
<?php print $styles; ?>
<?php print $scripts; ?>
<?php print drupal_get_css(); ?>
<title>Testseite</title>
</head>
<body><div>Test</div></body>
</html>
Das Problem: die Variablen $head, $styles und $scripts werden im -Bereich ignoriert, bzw. nicht ausgegeben.
Wie kann ich Drupal überreden, hier etwas auszugeben?
Das Laden der CSS mit der Funktion "drupal_get_css()" funktioniert zumindest teilweise, es wird folgende Zeile ausgegeben:
<link type="text/css" rel="stylesheet" media="all" href="/sites/all/exec/sites/default/files/css/css_41396571140396d63cd32c0855734913.css" />
Wie bekomme ich die fehlerhafte Angabe "/sites/all/exec" aus der CSS-URL?
Danke für Eure Hilfe!
Tobias
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich habe zwar nicht wirklich
am 13.03.2012 - 16:58 Uhr
Ich habe zwar nicht wirklich verstanden, was du machen willst, aber wenn ich mir den CSS-Dateinamen anschauen, dann sieht das so aus, als ob du ein Caching für die CSS-Dateien angeklickt hast:
Startseite » Verwaltung » Konfiguration » Entwicklung --> Leistung.
Gruß
Berthold Lausch
Modul
am 13.03.2012 - 17:10 Uhr
Schau mal, wie man in Drupal ein Modul erstellt und wie man mit hook_menu arbeitet.
@Berthold: Das mit dem
am 13.03.2012 - 17:52 Uhr
@Berthold:
Das mit dem Caching soll so auch sein, ist also korrekt und will ich auch haben.
Nur der Link zu der CSS-Datei stimmt nicht:
"/sites/all/exec/sites/default/files/css/css_41396571140396d63cd32c0855734913.css"
... soll sein:
"/sites/default/files/css/css_41396571140396d63cd32c0855734913.css"
@Kars-T
Sehe zur Zeit noch keinen Zusammenhang mit "hook_menu" – es soll kein neues Modul entstehen, sondern nur eine einfache, "externe" Seite – oder habe ich da was übersehen?
Um was es mir geht:
Für Facebook-Tabs benötige ich _nur_ den Inhalt einer einzigen Drupal-Node als simple HTML-Seite im Design des aktuellen Themes.
Den Inhalt bekomme ich ganz einfach über
<?php
$nid = '100'; $node = node_load($nid); print $node->body;
?>
Und wenn ich jetzt noch die CSS laden könnte, könnte ich mir den ganzen Aufwand mit den Facebook-Modulen und Secure Pages/ SSL etc. sparen ...
... dachte ich mir zumindest ...
Externe Seite?
am 13.03.2012 - 17:57 Uhr
Erkläre mir bitte mal, was für dich eine "externe" Seite ist?
Externe Seite!
am 13.03.2012 - 18:45 Uhr
"Extern" ist natürlich etwas missverständlich ... was ich meine ist ein direkter Link zu einer echten HTML-/PHP-Datei wie zum Beispiel:
mydomain.de/sites/all/exec/test.php
Normalerweise werden die Inhalte von Drupal ja "intern" verwaltet – es gibt ja nicht für jede Node eine eigene HTML-Seite ...
Mein Ziel ist also eine HTML-Seite, welche frei vom üblichen "Ballast" oder URL-Rewrite-Regeln etc. lediglich den Inhalt einer Node darstellt.
Drupal soll sich also nicht weiter darum kümmern – was soweit ja auch wunderbar funktioniert.
Nur wünsche ich mir, dass sich Drupal jetzt doch noch um die komprimierte CSS-Datei kümmert und mir dafür den korrekten Link ausgibt.
Für mich sieht es so aus, als würde Drupal in der Funktion "drupal_get_css()" den Base-Path mit ausgeben, welcher in meinem Fall leider nicht "/" sondern "/sites/all/exec/" ist.
EDIT: Ich scheine den Fehler gefunden zu haben:
Ich musste vorher nur den Base-Path neu definieren:
<?php
global $base_url;
$base_path = '/';
?>
Und warum verwendest du nicht
am 13.03.2012 - 20:15 Uhr
Und warum verwendest du nicht einfach die URL zum Node? (node/100)?
Beim direkten Aufruf von z.B.
am 13.03.2012 - 23:35 Uhr
Beim direkten Aufruf von z.B. node/10 müsste ich erstmal alle für dieses eine Node zuständige Templates "säubern", damit ich nur die HTML-Bestandteile habe, welche ich haben möchte.
Ausserdem müsste ich für diese Node u.a. noch den URL-Alias deaktivieren und die htaccess ändern, damit ich nur diese Seite unter SSL aufrufen kann (was in dem Fall notwendig ist).
Und zu allem Überfluss möchte ich die Seite node/10 eigentlich zusätzlich auch ganz normal, also ohne Änderungen aufrufen können ...
Schien mir etwas zu kompliziert für eine einfache Seite – und das anfangs genannte Skript macht den ganzen Aufwand unnötig.
Dann erstell dir ein
am 13.03.2012 - 23:59 Uhr
Dann erstell dir ein Mini-Modul, was den node ausgibt und lege dir für diesen Pfad ein extra Template (page.tpl.php) an, dann hast du doch alles, oder? Das, was du da machst ist - entschuldige bitte - ziemlicher Müll.
hook_menu
am 14.03.2012 - 10:07 Uhr
Also was du beschreibst ist eindeutig eine Verwendung von hook_menu. Versuche bitte nicht an Drupal vorbei zu gehen und den bootstrap selbst zu machen. Drupal ist framework genug, das du immer damit arbeiten solltest. Du willst einfach das Drupal deine Daten verwaltet und nicht nur CSS und JS dazu gibt. Rechteschicht, Caching und Kontrolle bekommst du einfach so dazu. Du könntest auch einen andern bootstrap Mechanismus einbauen, das wäre aber recht komplex. Was du da machst sind quasi Core Hacks und das macht man einfach nicht. Ansonsten solltest du entweder reines PHP machen oder vielleicht symfony, wenn Drupal dir nicht behagt.
Mini-Müll-Modul
am 14.03.2012 - 13:12 Uhr
@Exterior:
"ziemlicher Müll" ... ist entschuldigt ... :-)
Für Müll funktioniert es ziemlich gut – aber zugegeben weiss ich nicht wirklich, was ich da mache.
@Kars-T:
Drupal behagt mir grundsätzlich sogar sehr - aber die Lernkurve ist für manche, simpel erscheinende Ergebnisse nicht ganz ohne ...
Und es ist (finanziell) ein Unterschied, ob ich etwas in einer Stunde zusammengebastelt bekomme, oder ob ich für eine saubere Lösung – wäre toll! – erstmal einen Tag lang oder mehr recherchieren muss ...
Bislang habe ich für meine Lösung noch keinen Nachteil entdeckt – wobei ich natürlich keine Ahnung habe, ob ich da ein extremes Sicherheitsloch oder ähnliches gebastelt habe.
Sobald ich mehr Zeit habe, werde ich mich um einen saubere Lösung kümmern: interessiert mich ja schon ... und die nächsten Herausforderungen kommen bestimmt ...
Zitat: Für Müll funktioniert
am 14.03.2012 - 13:28 Uhr
Für Müll funktioniert es ziemlich gut – aber zugegeben weiss ich nicht wirklich, was ich da mache.
Das mit dem "Müll" bezieht sich auch eher darauf, dass du da an Drupal vorbei arbeitest und das macht man einfach nicht und ist hier nicht gern gesehen.
Bislang habe ich für meine Lösung noch keinen Nachteil entdeckt
Der Nachteil ist, dass Drupal die Seite nicht kennt und somit auch nicht eingreifen kann, alle Sicherheitsaspekte gehen damit flöten, ganz unabhängig davon, ob du da jetzt ein Sicherheitsloch rein gerissen hast oder nicht. Es wäre einfach sauberer, wenn man es so macht, wie es gedacht ist. Sonst kommt man auch irgendwann vom hundertsten ins tausendste, wenn man für zig Kleinigkeiten an Drupal vorbei eintwickeln will. Das ist einfach nicht Sinn der Sache. Und wenn man sich einmal ordentlich damit befasst hat, unterstützt Drupal auch sehr gut, sodass man einfache Probleme mitunter noch einfacher Lösen kann. Aber wenn man sich eben bei jeder Sache sagt "Nö, da müsste ich mir jetzt zuviel anlesen, da mache ich lieber eine Extrawurst", dann kommt man natürlich nicht gut voran und steigt nie so richtig durch.
aber die Lernkurve ist für manche, simpel erscheinende Ergebnisse nicht ganz ohne ...
Die Lernkurve ist bei Drupal allgemein relativ heftig, das muss man in Kauf nehmen, wenn man damit arbeiten will.