SilverStripeサイトのキャッシュマニフェストファイルに新しい画像ファイルを動的に追加しようとしています。私は$静的変数にSilverStripe adminにアップロードされた新しいイメージファイルを追加したい更新:アップロード時に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;
}
}
:私は現在、私はキャッシュさを必要とする現在のすべてのファイルを保持している機能の始まりを持っています。私は画像がYoutubeサムネイルから引き出されているので、特定の方法で画像タグを構築する必要があります。 VideoLinkIDsという管理者モデルがあります.YouTubeのビデオIDを取得するVideoIDというフィールドがあります。私は何とか画像タグのセットアップのこの種で、画像のリストを構築するための方法を見つける必要があります:私は(最終的に)これでいくつかの進歩を遂げるために管理している
<img class='vidThumb' src='http://img.youtube.com/vi/".VideoID."/0.jpg />
を、ここで私が持っているものです。私は現在の日付とバージョン番号の変数を保持するCacheManifestクラスを作成しました(これは、上記のUpdateManifest
関数の変数$static
内のバージョンと日付を更新するために使用されます)。
public function onAfterWrite(){
$updateGallery = parent::getCMSFields();
//get the entry from the CacheManifest database
CacheManifest::get()->(get VersionNumber and CurrentDate from database?)
return $updateGallery;
}
は、私が欲しいもの:データベースが新しい動画IDはadminに保存されるたびに更新されるように
<?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
機能は、その後VideoLinkIDのonAfterWrite()
メソッドのクラスファイルで呼び出されますupdateCacheは、新しいビデオIDが追加されるたびに、VersionNumber
を1ずつインクリメントします(SilverStripe構文では、その部分を行う方法が少し分かりません)。ビデオをアップロードするたびにCacheManifest
テーブルに新しいエントリを追加する必要はありません。最初のエントリを更新しておきたいだけです。
編集:CMSとYouTube動画IDの関係は次のとおりです。ページテンプレートタイプには「動画ID」というタブがあり、コンテンツマネージャーで任意の数のYouTube動画IDを貼り付けることができます。これらのIDは、YouTubeのビデオプレビューサムネイルを取得するために使用されます。これらのサムネイルは、ギャラリーのポップアップモーダルで表示され、ユーザーが見ることができ、全編のビデオを見ることができます。
このサイトでは、最低でもギャラリーを表示してもYouTubeプレビューサムネイルを表示できるようにするため、キャッシュマニフェストファイルが必要になります。キャッシュマニフェストを管理する標準的な方法を手動で更新する方法を見てみると、コンテンツマネージャがYouTubeのビデオIDを追加するときに、開発者がサイトのキャッシュマニフェストを常に更新し続ける必要があるため、これは理想的ではありません。
ダイナミックキャッシュマニフェストファイルは、この場合、CMSのページテンプレートに追加された各ビデオIDで日付とバージョン番号を更新するものとして非常に便利です。したがって、CacheManifestデータ・オブジェクト・クラスの存在。このクラスは、現在の日付とintをupdateCache()関数内に格納します。この関数は、VideoLinkIDクラスのonAfterWrite()で何とか呼び出される必要があります。
これは私の考えではなく、別の開発者によって策定されたもので、これは私が行なわなければならないものです。正直言って、私はむしろより良い方法を見つけるだろうが、私は承認されたものは見つけられておらず、私が知っている人もいません。これは全く新しいものであり、間違いなく規範ではありません。
関連する? 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 –