Я работаю над попыткой динамического добавления новых файлов изображений в файл манифеста кэша для сайта SilverStripe. У меня есть начало функции, которая в настоящее время проводит все текущие файлы мне нужно кэшированные:ОБНОВЛЕНИЕ: Обновление версии кеша манифеста и даты в SilverStripe при загрузке
class HomePage_Controller extends ContentController {
private static $allowed_actions = array (
"UpdateManifest"
);
public function UpdateManifest() {
$static = <<<EOT
CACHE MANIFEST
#$ManifestDate $ManifestVersion
#all javascript/jquery files currently added
#css files currently added
#image files currently added
EOT;
$static = $static . "\n" . "/test.html";
$this->response->addHeader("Content-type", "text/cache-manifest");
return $static;
}
}
Я хочу, чтобы добавить новые файлы изображений, загруженных в админ SilverStripe к статической переменной $. Мне нужно создать теги изображений определенным образом, хотя, поскольку изображения вытягиваются из миниатюр Youtube. У меня есть модель администратора под названием VideoLinkID, у которой есть поле под названием VideoID, которое принимает идентификатор видео Youtube. Мне нужно каким-то образом найти способ, чтобы построить из списка изображений с такого рода установки изображения метки:
<img class='vidThumb' src='http://img.youtube.com/vi/".VideoID."/0.jpg />
мне удалось добиться определенного прогресса с этим (в конце концов), и вот что у меня есть: я создал класс CacheManifest, который будет удерживать текущую дату и переменные номера версии (они будут использоваться для обновления версии и даты внутри переменной $static
в функции UpdateManifest
сверху).
<?php
class CacheManifest extends DataObject {
private static $db = array(
'CurrentDate' => 'Date',
'VersionNumber' => 'int'
);
private static $summary_fields = array(
'ID' => 'ID',
'CurrentDate' => 'Current Date',
'VersionNumber' => 'Version Number'
);
public function updateCache(){
$currentDate = SS_Datetime::now();
$versionNumber = 1;
$this->CurrentDate = $currentDate;
$this->VersionNumber = //increment the value currently stored in the database
$this->write();
}
}
Эта updateCache
функция затем вызывается в файле класса для onAfterWrite()
метода VideoLinkID, так что база данных обновляется каждый раз, когда новый идентификатор видео сохраняется в админ:
public function onAfterWrite(){
$updateGallery = parent::getCMSFields();
//get the entry from the CacheManifest database
CacheManifest::get()->(get VersionNumber and CurrentDate from database?)
return $updateGallery;
}
Что я хочу делать с updateCache - увеличивать VersionNumber
на 1 каждый раз, когда добавляется новый идентификатор видео (с синтаксисом SilverStripe, я немного запутался в том, как сделать эту часть). Я не хочу добавлять новую запись в таблицу CacheManifest
каждый раз, когда я загружаю видео - я просто хочу обновить первую запись.
EDIT: Связь между CMS и идентификаторами видеоизображений в YouTube: Тип шаблона страницы содержит вкладку «Идентификаторы видео», в которой менеджер содержимого может вставлять любое количество идентификаторов видео YouTube. Эти идентификаторы затем используются, чтобы захватить миниатюры предварительного просмотра видео в YouTube. Эти миниатюры отображаются во всплывающем окне галереи, чтобы пользователи могли видеть и нажимать, чтобы просмотреть полноразмерные видеоролики.
На этом сайте понадобится файл манифеста кэша, чтобы гарантировать, что пользователи, по крайней мере, смогут просматривать миниатюры предварительного просмотра youtube при просмотре галереи. Поскольку стандартным методом поддержки манифеста кэша является его обновление вручную, это было бы нецелесообразно, так как разработчику необходимо было постоянно обновлять манифест кэша сайта, поскольку контент-менеджер добавляет в YouTube идентификаторы видео (не знаю, как многие идентификаторы видео на YouTube будут всегда)
Файл манифеста динамического кэша был бы очень полезен в этом случае, что бы обновить дату и номер версии с каждым идентификатором видео, добавленным в шаблон страницы в CMS. Следовательно, существование класса объектов данных CacheManifest. Этот класс хранит текущую дату и int внутри функции updateCache(). Эта функция должна каким-то образом вызываться в onAfterWrite() в классе VideoLinkID.
Ничто из этого не было моей идеей, оно было сформулировано другим разработчиком, и, похоже, это то, с чем мне нужно идти. Честно говоря, я предпочел бы найти лучший способ, но я не нашел ничего, что было одобрено, и никто другой, кого я знаю, тоже. Все это совершенно новое и определенно не норма.
Родственные? http://stackoverflow.com/questions/36084893/dynamically-update-manifest-file-based-on-image-uploads-in-silverstripe-admin –
Связанный, но немного более углубленный –
другой связанный с ним вопрос: http: /stackoverflow.com/questions/36186948/calling-to-data-object-function-on-upload-silverstripe –