2012-04-13 2 views
-1

Так что я в основном пытаюсь передать теги <link> и <script> в свой исходный заголовочный файл из файла с файлами модулей (который отображается в теле страницы). Как передать переменные, содержащие эти ссылки?Передача дополнительных скриптов из представления в заголовок

В настоящее время я просто добавил дополнительные теги <head></head> в мой модуль, но это просто бесполезно и изворотливо, так как это означает, что теги головы используются вверху страницы, а также в середине пути вниз.

Редактировать:Не понял, что переполнение стека отредактировал мои теги, имеющие решающее значение для этого вопроса! Извините ребята!

+0

, назначив их в своем контроллере и отправив их в оба вида. –

+0

@Sneaksta, пожалуйста, отправьте примеры кода. Кроме того, пожалуйста, уточните, что именно вы пытаетесь выполнить. Вы пытаетесь иметь один вид, который содержит теги «head»? Вы пытаетесь включить что-то конкретное в теги заголовка? – hypervisor666

+0

Представления буферизуются, если вы загружаете один из них, одна и та же переменная будет доступна и для этого второго представления –

ответ

0

Похоже, вам действительно нужна установка шаблона для CodeIgniter. Вот ссылки на некоторые из моих любимых:

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

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

И мой личный фаворит для простоты:

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

EDIT: Per @ вопрос Sneaksta, вот как Я добавляю скрипты css к моему шаблону:

В моем основном шаблоне у меня есть этот код:

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

Тогда в моих контроллеров, которые, возможно, потребуется загрузить различные файлы CSS в функции Я это:

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

относительно вашего личного фаворита для шаблона, как бы вы добавили функциональность, чтобы можно было динамически определять скрипты css? – Sneaksta

+0

@Sneaksta, я обновил свой ответ, чтобы объяснить, как использовать динамические таблицы стилей для каждого контроллера/функции. – davidethell

0

Sneaksta,

Я думаю, Я понимаю, о чем вы спрашиваете, но я не уверен на 100%, потому что у вас нет каких-либо примеров кода.

Итак, я приведу вам пример того, как вы можете иметь «телескопический» вид, который позволяет модульно загружать различные теги стиля внутри тегов заголовка.

Как упоминал Damien Pirsy, Views буферизуются, что означает, что CI создает специальный выходной буфер и объединяет серию объектов View вместе, а затем выводит конечный буферный контент как завершенную веб-страницу.

Мой пример ниже построен на такого рода цепи мышления:

End User (вызовы) -> Page Controller, который затем: (звонки & пропусков Params) -> Base View (называет несколько фрагментов просмотров) -> Fragment Просмотр + -> Fragment Просмотр + -> Fragment View = Final Накопительное страница -> (отправляется обратно в качестве выходного сигнала) -> End User

Fi Сначала сделайте «базовый вид», который мы будем называть «базой».PHP»ради эталонным:

<!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> 

Далее создаем стиль View (примечание: Следующий фрагмент кода будет в отдельном файле, все само по себе), который мы будем называть„style1.php“, и должен находится с . ваши другие виды для того, чтобы CI, чтобы найти его, например, в папке «приложения/просмотров» Это позволяет поменять блок встроенного стиля, объявленный в заголовке, только изменяя который вид стиль загружен:

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

</style> 

Затем вы создаете альтернативный вид стиля (обратите внимание: следующий фрагмент кода будет в отдельном файле сам по себе), который мы будем называть «style2.php», и должен располагаться с вашим другие представления, чтобы CI мог найти его, например. внутри папки «application/views». Это позволяет поменять блок встроенного стиля, объявленный в заголовке, просто изменив стиль, который вид загружен:

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

</style> 

Теперь внутри нашего контроллера «example.php» мы говорим base.php загрузить style1.php файл в свой заголовок. Мы делаем это, передавая имя файла в качестве параметра, когда мы загружаем представление base.php, передавая имя файла как элемент ассоциативного массива, воспламенитель кода будет анализировать этот массив параметров и создавать переменную с тем же именем, что и ассоциативный элемент, и сделать эту переменную доступной для вас внутри вида base.php:

<?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); 
      } 
     } 

?> 

совокупный результат должен быть модульным возможность переключать теги стиля в заголовке страницы, с помощью просто указав какой «вид в стиле» для загрузки (вы могли бы даже построить модель, которая извлекает, какие «представления стиля» загружаются из таблицы базы данных). Очевидно, что этот подход имеет определенные ограничения служебной информации внутри веб-браузера, поскольку вы создаете фактический встроенный HTML-код, вместо того, чтобы ссылаться на файл CSS через тег ссылки. Это означает, что браузер не будет кэшировать содержимое css для каждой загрузки страницы, но ему придется загружать его при каждом последующем запросе.

+0

Отличный ответ! Я не рассматривал использование тегов