2016-05-13 4 views
3

Этот вопрос более теоретический, чем практический. Предположим, у меня есть проект, основанный на PHP framework Symphony/Zend, я также использую gulp для работы с внешним интерфейсом. Я хотел бы сделать этот проект профессионально, поэтому я использую плагины gulp, такие как jade, clean, uglify, minify, gzip, imagemin и rev. Если кто не знает, что это за глоток обороты, здесь мы идем:Использование задач gulp с файлами просмотра PHP

Static asset revisioning by appending content hash to filenames unicorn.css → unicorn-d41d8cd98f.css 

Хорошей вещи для кэширования статических файлов, например.

Итак, вот проблема ...
Я бег задачи глотка, и я получил следующие файлы:

- assets 
    - css 
    - style-bfd65634.css 
    - js 
    - vendor-mkg5454.js 
    - img 
    - background-ok54353.png 
    etc... 

После того как я закончу свою работу во внешнем интерфейсе, я хочу, чтобы поместить его в просмотре файлах в PHP фреймворки (PHTML файлы), например: layout.phtml

... 
<link type="text/css" rel="stylesheet" media="screen" href="<?php echo $this->basePath(); ?>/assets/css/style-bfd65634.css"> 
... 
<div id="logo"> 
    <img src="<?php echo $this->basePath(); ?>/assets/img/background-ok54353.png" /> 
</div> 
... 

и то же самое происходит и с JS-файлы, изображения и т.д.
Через несколько недель мне нужно что-то изменить в стилях CSS и что теперь? Как я могу повторно запускать задачи gulp без необходимости изменять файлы phtml из фреймворка? Или мне нужно изменить измененные файлы вручную в файле EVERY phtml?
Если да, то в чем смысл использовать такие плагины, как gulp-rev? Просто для статических сайтов? Насколько я знаю, нет никакого плагина, который бы конвертировал jade-файлы в phtml с PHP-тегами

ответ

0

Только для статических сайтов?

в основном да.

Чтобы сделать то же самое с php, вы должны использовать функцию-оболочку для отображения URL-адреса ресурса.

Эта функция обертка будет принимать относительный URL, соответствует его фактической путь к файлу, найдите время последнего обновления файла и добавить его в возвращаемом URL такие url/to/asset.some?l=<filemtime value>

см http://php.net/manual/fr/function.filemtime.php


Я должен упомянуть, что альтернативным способом является создание вашего php-файла через цепочку сборки grunt, см. Wiredep. Но я не рекомендую его. см. https://github.com/stephenplusplus/grunt-wiredep

1

Чтобы ввести эти вновь созданные файлы в определенном месте, необходимо использовать gulp-inject.

<!DOCTYPE html> 
<html> 
<head> 
    <title>My index</title> 
    <!-- inject:css --> 
    <link rel="stylesheet" href="/src/style1.css"> 
    <link rel="stylesheet" href="/src/style2.css"> 
    <!-- endinject --> 
</head> 
<body> 
0

Plugin глоток обороты произвести rev-manifest.json файл с картой:

{ 
    "css/main.css": "css/main-f95991b528.css", 
    "js/main.js": "js/main-5598f71801.js" 
} 

Существует красивое решение в рамках Laravel с использованием elixir функции в PHP.

<link rel="stylesheet" type="text/css" href="<?php echo elixir("css/main.css") ?>"> 

elixir И функция:

function elixir($file) 
    { 
     static $manifest = null; 

     if (is_null($manifest)) { 
      $manifest = json_decode(file_get_contents(public_path('build/rev-manifest.json')), true); 
     } 

     if (isset($manifest[$file])) { 
      return '/build/'.$manifest[$file]; 
     } 

     throw new InvalidArgumentException("File {$file} not defined in asset manifest."); 
    }