私が取り組んでいたこのクラスがあり、次のようなアセットの配列を作成できます。
array(
'css' => array(
array('name' => 'bla'),
array('name' => 'bla2')
),
'js' => array(
array('name' => 'bla.js'),
array('name' => 'bla2.js')
)
);
次に、このクラスはこれらを解析してレンダリングします。次のようにします。
$assets = new AssetLoader(array(
'css' => array(
array('name' => 'bla'),
array('name' => 'bla2')
),
'js' => array(
array('name' => 'bla.js'),
array('name' => 'bla2.js')
)
));
$assets->renderAssets();
アプリケーションの header.php でこれを行うと仮定すると、2 つの css ファイルと 2 つの js ファイルが作成されます。
新しいアセットを作成する場合は、次のようにします。
$assets->createAssets('css', array('name' => 'bla3'));
createAssets の問題は次のとおりです。
bla3
実際には、新しい css アセットを作成するように指示しているときに、js アセットと css アセットの両方としてアセット を作成します。- これは問題であるABOVE しか実行できません
renderAssets();
。アプリケーションのどこでも実行できるはずなので、名前は次のとおりです。createAssets()
これは私のクラスです:
<?php
class AssetLoader {
private $assets;
private $cssAssets;
private $jsAssets;
public function __construct(array $assets){
$this->assets = $assets;
$this->seperateAssets($this->assets);
}
public function renderAssets(){
$this->renderCss();
$this->renderJs();
}
public function createAssets($type, array $assets){
if(isset($this->assets[$type])){
array_push($this->assets[$type], $assets);
$this->seperateAssets($this->assets);
}
}
protected function renderCss(){
foreach($this->processCss() as $css){
echo $css;
}
}
protected function renderJs(){
foreach($this->processJs() as $js){
echo $js;
}
}
protected function processCss(){
$html = array();
foreach($this->cssAssets as $assetName){
foreach($assetName as $name=>$location){
$html[] = '<link rel="stylesheet" type="text/css" name="'.$name.'" href="'.$location.'" />';
}
}
return $html;
}
protected function processJs(){
$html = array();
foreach($this->cssAssets as $assetName){
foreach($assetName as $name=>$location){
$html[] = '<script type="text/javascript" name="'.$name.'" src="'.$location.'"></script>';
}
}
return $html;
}
private function seperateAssets(array $assets){
$this->seperateCss($assets);
$this->seperateJs($assets);
}
private function seperateCss($assets){
foreach($assets as $key=>$value){
if($key == 'css'){
$this->cssAssets = $value;
}
}
}
private function seperateJs($assets){
foreach($assets as $key=>$value){
if($key == 'js'){
$this->jsAssets = $value;
}
}
}
}
A)ヘッダーで呼び出されるcreateAsset()
への呼び出しの前ではなく、アプリケーションの任意の場所にアセットを作成するには、どのような変更を加える必要がありますか。renderAssets()
B) 作成したアセットを定義したタイプに追加する場合、上の例では、css 用の新しいアセットを作成していることがわかります。このアセットが css と js の両方にどのように追加されるか。