2012-04-13 12 views
-1

So versuche ich im Grunde, die <link> und <script> Tags in meine ursprüngliche Header-Datei aus einer Modulansicht Datei (die im Hauptteil der Seite angezeigt wird) übergeben. Wie kann ich Variablen übergeben, die diese Referenzen enthalten?Übergeben von zusätzlichen Skripts von der Ansicht zu Header

Momentan habe ich nur zusätzliche <head></head> Tags in die Ansicht meines Moduls gesetzt, aber es fühlt sich einfach chaotisch und zwielichtig an, da dies bedeutet, dass die Kopf-Tags oben auf der Seite und auch in der Mitte verbraucht sind.

Bearbeiten:Habe nicht erkannt, dass Stapelüberlauf meine Tags, die für diese Frage entscheidend sind, bearbeitet! Tut mir leid, Leute!

+0

indem Sie sie in Ihrem Controller zuweisen und sie an beide Ansichten senden. –

+0

@Sneaksta, bitte Code-Beispiele bekannt geben. Und bitte klären Sie auch, was genau Sie erreichen möchten. Versuchen Sie, eine Ansicht zu haben, die die "Kopf" -Tags enthält? Versuchen Sie, etwas Spezifisches in die Kopf-Tags aufzunehmen? – hypervisor666

+0

Ansichten werden gepuffert, wenn man einen innerhalb eines anderen lädt, wird die gleiche Variable auch für diese zweite Ansicht verfügbar sein –

Antwort

0

Es klingt, als ob Sie wirklich ein Vorlagen-Setup für CodeIgniter benötigen. Hier sind Links zu einigen meiner Favoriten:

http://williamsconcepts.com/ci/codeigniter/libraries/template/reference.html

http://philsturgeon.co.uk/demos/codeigniter-template/user_guide/

Und mein persönlicher Favorit für Einfachheit:

http://maestric.com/doc/php/codeigniter_template

EDIT: Pro @ Sneaksta Frage, hier ist, wie Ich füge CSS-Skripte zu meiner Vorlage hinzu:

In meinem Master-Template habe ich diesen Code:

<?php if (!empty($cssFiles)): ?> 
<?php foreach ($cssFiles as $styleSheet): ?> 
    <link rel="stylesheet" media="screen" href="<?= base_url(); ?>styles/<?= $styleSheet; ?>" /> 
<?php endforeach; ?> 
<?php endif; ?> 

Da ist in meinem Controller, die verschiedene CSS-Dateien pro Funktion geladen werden kann muss ich dies tun:

$cssFiles = array('style1.css', 'style2.css', 'style3.css'); 
$this->template->set('cssFiles', $cssFiles); 
+0

in Bezug auf Ihren persönlichen Favoriten für die Vorlage, wie würden Sie Funktionalität hinzufügen, so dass es möglich ist, die CSS-Skripte dynamisch zu definieren? – Sneaksta

+0

@Sneaksta, Ich habe meine Antwort aktualisiert, um zu erklären, wie ich dynamische Stylesheets pro Controller/Funktion verwende. – davidethell

0

Sneaksta,

Ich denke, Ich verstehe, worüber du fragst, aber ich bin nicht 100% sicher, weil du keine Code-Beispiele gepostet hast.

Also werde ich Ihnen ein Beispiel geben, wie Sie eine "teleskopische" Ansicht haben, mit der Sie verschiedene Stil-Tags innerhalb der Kopf-Tags modular laden können.

Wie Damien Pirsy erwähnt, werden Ansichten gepuffert, was bedeutet, dass CI einen speziellen Ausgabepuffer erstellt und eine Reihe von View-Objekten zusammenfügt und dann den endgültigen Pufferinhalt als fertige Webseite ausgibt.

unten Mein Beispiel auf diese Art von Kette des Denkens gebaut:

Endbenutzers (Anrufe) -> Seite Controller, der dann: (ruft & Pässe params) -> Erstansicht (ruft mehrere Fragmentsichten) -> Fragment View + -> Fragment View + -> Fragment View = Schluss Kumulative Seite -> Endbenutzer

-> (zurück als Ausgabe gesendet) Fi Machen Sie zuerst die "Basisansicht", die wir "Basis" nennen.php“Referenz zuliebe:

<!doctype html> 
<html> 
    <head> 
      <!-- Base View --> 
      <?php 
       //This "if" + "isset()" statement is important, 
       // because if you forget to pass the variable in the controller 
       // CI will throw an error. 
       // Also important: the name of variable ($style) MUST match the 
       // the name of the associative element in the controller! (See 
       // remarks below on handling this in the controller) 
       if(isset($style)) 
       { 
         //Loading views is like a telescoping effect: 
         //A view may load other views into itself recursively 
         $this->load->view($style); 
       } 
       else 
       { 
         //This echo statement will show a comment in 
         // source code if an error occurred during loading a view 
         echo "<!-- Style not found -->"); 
       } 
      ?> 

    </head> 
    <body> 
     <!-- Page Content Here --> 
    </body> 
</html> 

Als Nächstes erstellen Sie die Design-Ansicht (Anmerkung: die folgenden Codefragment alle in einer separaten Datei selbst sein würde), die wir rufen‚style1.php‘und muss sich mit . Ihre anderen Ansichten, um für CI, es zu finden, in der „application/views“ Ordner zB auf diese Weise können Sie einen Inline-Stil Block im Header von nur ändert, welcher Stil Ansicht geladen wird erklärt auslagern:

<style type="text/css"> 
     /*Style 1:*/ 
     /*Just do something simple and obvious, i.e. turn text red*/ 
     body { color: red; } 

</style> 

Als nächstes erstellen Sie die alternative Stilansicht (Anmerkung: das folgende Codefragment würde sich in einer separaten Datei befinden), die wir "style2.php" nennen, und muss sich mit Ihrer befinden andere Ansichten, damit CI es finden kann, z.B. im Ordner "application/views". Auf diese Weise können Sie einen Inline-Stil Block im Header deklariert tauschen nur durch Ändern welcher Stil Ansicht geladen wird:

<style type="text/css"> 
     /*Style 2:*/ 
     /*Just do something simple and obvious, i.e. turn text blue*/ 
     body { color: blue; } 

</style> 

nun innerhalb unserer Controller „example.php“ wir sagen base.php die style1.php laden Datei in den Header. Dazu übergeben wir den Dateinamen als Parameter, wenn wir die base.php-Ansicht laden, indem wir den Dateinamen als Element eines assoziativen Arrays übergeben. Code-zünder analysiert dieses Parameter-Array und erstellt eine Variable mit demselben Namen wie die assoziatives Element und macht diese Variable in der base.php Ansicht zur Verfügung:

<?php 

     class Example extends CI_Controller 
     { 
      //Constructor 
      function __construct(){ parent::__construct(); } 

      //Base View request handler 
      function baseview() 
      { 
        //Note: Make an array, be certain to name the element 
        //  the same as what will be expected inside base.php 
        $params = array("style" => "style1.php"); 

        //Switching to load a different style is now easy 
        // just comment out the line above, and uncomment the line below: 
        //$params = array("style" => "style2.php"); 

        //Pass the parameters array into the CI load view method: 
        $this->load->view("base.php", $params); 
      } 
     } 

?> 

das kumulative Ergebnis sollte die modulare Fähigkeit sein, den Stil-Tags in dem Seitenkopf zu wechseln, nur um die „Stil-Ansicht“ die Angabe zu laden (Sie könnten sogar ein Modell erstellen, das die zu ladenden "Stilansichten" aus einer Datenbanktabelle abruft). Offensichtlich hat dieser Ansatz innerhalb eines Webbrowsers bestimmte Verarbeitungs-Overhead-Einschränkungen, da Sie tatsächlichen Inline-HTML-Quellcode konstruieren, anstatt über ein Link-Tag mit einer CSS-Datei zu verknüpfen. Dies bedeutet, dass der Browser den css-Inhalt nicht für jede Seitenladung zwischenspeichert, sondern ihn bei jeder weiteren Anfrage herunterladen muss.

+0

Große Antwort! Ich habe nicht in Betracht gezogen, die