2013-03-11 13 views
9

möchte ich Bootstraps glyphicons im Spiel RahmenBootstrap glyphicons im Spiel Rahmen

so verwenden, wenn i <i class="icon-search" /> verwenden, Bootstrap wird in "assets/img/..." für die Symbole suchen. Dieses Verhalten steht in Konflikt mit der anatomy of a play application, weil Bilder in "Assets/Bilder/..." sind.

Also habe ich versucht, diese neu zuordnen, indem eine zusätzliche Route für GET-Anfragen zu "assets/img" definieren:

# Map static resources from the /public folder to the /assets URL path 
GET  /assets/img/*file   controllers.Assets.at(path="/public/images", file) 
GET  /assets/*file    controllers.Assets.at(path="/public", file) 

Aber tut so, bekomme ich einen Übersetzungsfehler „nicht genügend Argumente für die Methode an: (Pfad: String, Datei: String) play.api.mvc.Call Unspezifizierte Wertparameterdatei. "auf jedem anderen öffentlichen Asset, das ich anrufe.

Was mache ich falsch?

+0

Ich denke, Sie versuchen, ein CSS-Pfadproblem mit Ihrer Anwendungskonfiguration zu beheben. Können Sie das CSS nicht reparieren? – isherwood

+0

Ich möchte nicht Twitters Stock CSS hacken, um dies zu beheben, solange das Spiel mir eine sanfte Möglichkeit bietet, Pfade über Routen neu zuzuordnen. –

+0

Ich verstehe diese Philosophie, aber Bootstrap-Variablen sollen ... variabel sein. :-) – isherwood

Antwort

4

Eigentlich ... verwirren die Menschen oft etwas Anfangsstruktur damit die gleiche genau sein muss. Im Fall von app Ordner, das ist richtig. Play verwendet einige implizite Importe für controllers und models und eine Änderung ohne Grund wird mehr Probleme bringen, als es wert ist. Anyway public Ordner wird in keiner Standardaktion/Controller/View gerendert, so dass das Layout vollständig angepasst werden kann.

(Anmerkung: OK, ich muss confese, ich nicht diese doc gelesen haben, schrieb sie Sie sollten Ihre statischen Vermögenswerte wie folgt organisieren alle Play-Anwendungen konsistent zu halten aber es ist nicht wahr .! :))

Allgemeine Regel ist: brechen Sie nicht die gebrauchsfertigen Frameworks, Plugins, etc, die in public Dir platziert sind. Für ein Beispiel, während Sie Bootstrap mit einigen zusätzlichen Routen ziemlich einfach ändern können, wenn Sie das gleiche mit Aloha-Editor versuchen, werden Sie wahrscheinlich es dauerhaft beschädigen. Wenn Sie eine saubere Struktur behalten möchten - erstellen Sie für ein Beispiel public/frameworks/bootstrap-current Ordner und extrahieren Sie dort Paket von ursprünglichen Autoren.

Es wird Ihnen erlauben, auf die neuere Version mit nur einfachem Entpacken der Packung zu aktualisieren, wird auch Ihre Kopfschmerzen vermeiden.

+0

Tiziano erwähnte das auch schon in der Frage Kommentare. Ich stimme Ihnen absolut zu, das ist wahrscheinlich der beste und richtige Weg. Keine Ahnung, warum ich es nicht so gemacht habe;) ... Ich akzeptiere diese Antwort und die sehr gute Beschreibung, warum es der beste Weg ist. –

2

Wenn Sie Bootstrap WENIGER verwenden, den Pfad in variables.less ändern:

// Sprite icons path 
// ------------------------- 
@iconSpritePath:   "assets/images/techcore/glyphicons-halflings.png"; 
+0

ok, hoffte ich nicht mit dem ganzen LESS- und CoffeeScript-Ding in Kontakt zu kommen, weil das für mich völlig neu ist. Obwohl ich die Vorteile verstehe, mag ich immer noch, dass einige Dinge in meiner Web-App statisch sind;) ... ok, lass uns schauen, ob ich das lernen kann, ich werde es versuchen. –

8

Eigentlich mein Problem beschreibt, hat mir geholfen, ihn zu suchen hier;) ... hat bereits Stackoverflow die Antwort. Hoffentlich bringt meine Frage zumindest mehr Relevanz für dieses Thema, ich beantworte es selbst.

Laut How to use Twitter Bootstrap 2 with play framework 2.x musste ich statische Routen für jede einzelne Glyphicons-Datei definieren, dann werden Anfragen an andere Assets nicht "fehlgeleitet".

Ich habe einfach

# Map Bootstrap images 
GET  /assets/img/glyphicons-halflings.png   controllers.Assets.at(path="/public", file="/images/glyphicons-halflings.png") 
GET  /assets/img/glyphicons-halflings-white.png  controllers.Assets.at(path="/public", file="/images/glyphicons-halflings-white.png") 

# Map static resources from the /public folder to the /assets URL path 
GET  /assets/*file    controllers.Assets.at(path="/public", file) 

meine Routen, ich so keinen Rahmen in besonderer Weise ändern muß.

Dank Ihrer Anregungen sowieso

+0

Diese Lösung funktionierte für mich, aber zuerst hatte ich ein Problem, weil ich die Bootstrap-Bilder NACH den anderen Assets ablegte: Denken Sie daran, dass sie in der von Jürgen vorgeschlagenen Reihenfolge sein müssen! – nozebacle

+0

Genau das, was ich brauchte. – tuxdna