assetic เป็นเฟรมเวิร์กการจัดการสินทรัพย์สำหรับ PHP ที่ดูแลโดยทีมงาน Winter CMS
<?php
use assetic Asset AssetCollection ;
use assetic Asset FileAsset ;
use assetic Asset GlobAsset ;
$ js = new AssetCollection ( array (
new GlobAsset ( ' /path/to/js/* ' ),
new FileAsset ( ' /path/to/another.js ' ),
));
// the code is merged when the asset is dumped
echo $ js -> dump ();
สินทรัพย์ assetic คือสิ่งที่มีเนื้อหาที่สามารถกรองได้ซึ่งสามารถโหลดและทิ้งได้ เนื้อหายังรวมถึงข้อมูลเมตา ซึ่งบางส่วนสามารถจัดการได้ และบางส่วนไม่สามารถเปลี่ยนรูปแบบได้
คุณสมบัติ | แอคเซสเซอร์ | มิวเทเตอร์ |
---|---|---|
เนื้อหา | รับเนื้อหา | ตั้งค่าเนื้อหา |
เวลา | รับ LastModified | ไม่มี |
รากต้นทาง | getSourceRoot | ไม่มี |
เส้นทางต้นทาง | getSourcePath | ไม่มี |
เส้นทางเป้าหมาย | รับ TargetPath | ตั้งค่า TargetPath |
คุณสมบัติ "เส้นทางเป้าหมาย" ระบุตำแหน่งที่สินทรัพย์ (หรือคอลเลกชันของสินทรัพย์) ควรถูกทิ้ง
สามารถใช้ตัวกรองเพื่อจัดการเนื้อหาได้
<?php
use assetic Asset AssetCollection ;
use assetic Asset FileAsset ;
use assetic Asset GlobAsset ;
use assetic Filter LessFilter ;
use assetic Filter UglifyCssFilter ;
$ css = new AssetCollection ( array (
new FileAsset ( ' /path/to/src/styles.less ' , array ( new LessFilter ())),
new GlobAsset ( ' /path/to/css/* ' ),
), array (
new UglifyCssFilter ( ' /path/to/uglifycss ' ),
));
// this will echo CSS compiled by LESS and compressed by uglifycss
echo $ css -> dump ();
ตัวกรองที่ใช้กับคอลเลกชันจะเรียงซ้อนไปยังแต่ละส่วนของสินทรัพย์หากคุณทำซ้ำ
<?php
foreach ( $ css as $ leaf ) {
// each leaf is compressed by uglifycss
echo $ leaf -> dump ();
}
แกนหลักจัดเตรียมตัวกรองต่อไปนี้ในเนมสเปซ assetic Filter
:
CoffeeScriptFilter
: รวบรวม CoffeeScript ลงใน JavascriptCssImportFilter
: อินไลน์สไตล์ชีตที่นำเข้าCSSMinFilter
: ลดขนาด CSSCssRewriteFilter
: แก้ไข URL ที่เกี่ยวข้องในเนื้อหา CSS เมื่อย้ายไปยัง URL ใหม่GoogleClosureCompilerApiFilter
: คอมไพล์ Javascript โดยใช้ Google Closed Compiler APIHandlebarsFilter
: รวบรวมเทมเพลต Handlebars ลงใน JavascriptJavaScriptMinifierFilter
: ลดขนาด JavascriptJpegoptimFilter
: เพิ่มประสิทธิภาพ JPEG ของคุณJpegtranFilter
: เพิ่มประสิทธิภาพ JPEG ของคุณLessFilter
: แยกวิเคราะห์ LESS เป็น CSS (ใช้ less.js กับ node.js)LessphpFilter
: แยกวิเคราะห์ LESS เป็น CSS (โดยใช้ lessphp)OptiPngFilter
: เพิ่มประสิทธิภาพ PNG ของคุณPackerFilter
: บีบอัด Javascript โดยใช้ Packer ของ Dean EdwardsPhpCssEmbedFilter
: ฝังข้อมูลรูปภาพในสไตล์ชีตของคุณReactJsxFilter
: คอมไพล์ React JSX ลงใน JavaScriptScssphpFilter
: แยกวิเคราะห์ SCSS เป็น CSSSeparatorFilter
: แทรกตัวคั่นระหว่างเนื้อหาเพื่อป้องกันความล้มเหลวในการรวมStylesheetMinifyFilter
: บีบอัดไฟล์ CSS สไตล์ชีตStylusFilter
: แยกวิเคราะห์ STYL เป็น CSSTailwindCssFilter
: สร้างสไตล์ชีต Tailwind CSS โดยใช้ยูทิลิตี้ CLI แบบสแตนด์อโลนของ Tailwind CSSTypeScriptFilter
: แยกวิเคราะห์ TypeScript ลงใน JavascriptUglifyCssFilter
: ลดขนาด CSSUglifyJs2Filter
: ลดขนาด JavascriptUglifyJs3Filter
: ลดขนาด Javascript มีผู้จัดการสินทรัพย์เพื่อจัดระเบียบสินทรัพย์
<?php
use assetic AssetManager ;
use assetic Asset FileAsset ;
use assetic Asset GlobAsset ;
$ am = new AssetManager ();
$ am -> set ( ' jquery ' , new FileAsset ( ' /path/to/jquery.js ' ));
$ am -> set ( ' base_css ' , new GlobAsset ( ' /path/to/css/* ' ));
ผู้จัดการสินทรัพย์ยังสามารถใช้เพื่ออ้างอิงสินทรัพย์เพื่อหลีกเลี่ยงการทำซ้ำ
<?php
use assetic Asset AssetCollection ;
use assetic Asset AssetReference ;
use assetic Asset FileAsset ;
$ am -> set ( ' my_plugin ' , new AssetCollection ( array (
new AssetReference ( $ am , ' jquery ' ),
new FileAsset ( ' /path/to/jquery.plugin.js ' ),
)));
นอกจากนี้ยังมีตัวจัดการตัวกรองสำหรับการจัดระเบียบตัวกรองอีกด้วย
<?php
use assetic FilterManager ;
use assetic Filter ScssFilter ;
use assetic Filter CssMinFilter ;
$ fm = new FilterManager ();
$ fm -> set ( ' sass ' , new ScssFilter ( ' /path/to/parser/scss ' ));
$ fm -> set ( ' cssmin ' , new CssMinFilter ());
หากคุณไม่ต้องการสร้างวัตถุเหล่านี้ด้วยมือ คุณสามารถใช้โรงงานสินทรัพย์ซึ่งจะทำงานส่วนใหญ่ให้กับคุณ
<?php
use assetic Factory AssetFactory ;
$ factory = new AssetFactory ( ' /path/to/asset/directory/ ' );
$ factory -> setAssetManager ( $ am );
$ factory -> setFilterManager ( $ fm );
$ factory -> setDebug ( true );
$ css = $ factory -> createAsset ( array (
' @reset ' , // load the asset manager's "reset" asset
' css/src/*.scss ' , // load every scss files from "/path/to/asset/directory/css/src/"
), array (
' scss ' , // filter through the filter manager's "scss" filter
' ?cssmin ' , // don't use this filter in debug mode
));
echo $ css -> dump ();
AssetFactory
ถูกสร้างขึ้นด้วยไดเร็กทอรีรากซึ่งใช้เป็นไดเร็กทอรีฐานสำหรับเส้นทางสินทรัพย์ที่เกี่ยวข้อง
การใส่เครื่องหมายคำถามนำหน้าชื่อตัวกรองเนื่องจาก cssmin
อยู่ที่นี่ จะทำให้ตัวกรองนั้นถูกละเว้นเมื่อโรงงานอยู่ในโหมดแก้ไขจุดบกพร่อง
คุณยังสามารถลงทะเบียนผู้ปฏิบัติงานในโรงงานได้ และสินทรัพย์ทั้งหมดที่สร้างโดยโรงงานจะถูกส่งไปยังเมธอด process()
ของผู้ปฏิบัติงานก่อนที่จะส่งคืน ดูตัวอย่าง การป้องกันแคช ด้านล่าง
คุณสามารถดัมพ์เนื้อหาทั้งหมดที่ AssetManager เก็บไว้ไปยังไฟล์ในไดเร็กทอรีได้ นี่อาจจะอยู่ต่ำกว่ารูทเอกสารของเว็บเซิร์ฟเวอร์ของคุณ เพื่อให้สามารถให้บริการไฟล์แบบคงที่ได้
<?php
use assetic AssetWriter ;
$ writer = new AssetWriter ( ' /path/to/web ' );
$ writer -> writeManagerAssets ( $ am );
ซึ่งจะใช้ประโยชน์จากเส้นทางเป้าหมายของเนื้อหา
หากคุณให้บริการเนื้อหาจากไฟล์คงที่ตามที่อธิบายไว้ คุณสามารถใช้ CacheBustingWorker เพื่อเขียนเส้นทางเป้าหมายสำหรับเนื้อหาใหม่ได้ โดยจะแทรกตัวระบุก่อนนามสกุลไฟล์ที่ไม่ซ้ำสำหรับเนื้อหาเวอร์ชันใดเวอร์ชันหนึ่ง
ตัวระบุนี้อิงตามเวลาแก้ไขของเนื้อหา และจะพิจารณาเนื้อหาที่ขึ้นอยู่กับเนื้อหาด้วยหากตัวกรองที่ใช้รองรับ
<?php
use assetic Factory AssetFactory ;
use assetic Factory Worker CacheBustingWorker ;
$ factory = new AssetFactory ( ' /path/to/asset/directory/ ' );
$ factory -> setAssetManager ( $ am );
$ factory -> setFilterManager ( $ fm );
$ factory -> setDebug ( true );
$ factory -> addWorker ( new CacheBustingWorker ());
$ css = $ factory -> createAsset ( array (
' @reset ' , // load the asset manager's "reset" asset
' css/src/*.scss ' , // load every scss files from "/path/to/asset/directory/css/src/"
), array (
' scss ' , // filter through the filter manager's "scss" filter
' ?yui_css ' , // don't use this filter in debug mode
));
echo $ css -> dump ();
มีกลไกการแคชอย่างง่ายเพื่อหลีกเลี่ยงการทำงานที่ไม่จำเป็น
<?php
use assetic Asset AssetCache ;
use assetic Asset FileAsset ;
use assetic Cache FilesystemCache ;
use assetic Filter JavaScriptMinifierFilter ;
$ jsMinifier = new JavaScriptMinifierFilter ();
$ js = new AssetCache (
new FileAsset ( ' /path/to/some.js ' , array ( $ jsMinifier )),
new FilesystemCache ( ' /path/to/cache ' )
);
// the JavaScriptMinifierFilter compressor will only run on the first call
$ js -> dump ();
$ js -> dump ();
$ js -> dump ();
หากต้องการใช้ส่วนขยาย assetic Twig คุณต้องลงทะเบียนกับสภาพแวดล้อม Twig ของคุณ:
<?php
$ twig -> addExtension ( new assetic Extension ( $ factory ));
เมื่อติดตั้งแล้ว ส่วนขยายจะแสดงสไตล์ชีตและแท็กจาวาสคริปต์ที่มีไวยากรณ์คล้ายกับที่โรงงานสินทรัพย์ใช้:
{% stylesheets '/path/to/sass/main.sass' filter = 'sass,?yui_css' output = 'css/all.css' %}
< link href = " {{ asset_url }} " type = " text/css " rel = " stylesheet " />
{% endstylesheets %}
ตัวอย่างนี้จะแสดงองค์ประกอบ link
หนึ่งรายการบนหน้าเว็บที่มี URL ซึ่งสามารถพบเนื้อหาที่กรองได้
เมื่อส่วนขยายอยู่ในโหมดแก้ไขข้อบกพร่อง แท็กเดียวกันนี้จะแสดงผลองค์ประกอบ link
หลายรายการ หนึ่งรายการสำหรับแต่ละเนื้อหาที่อ้างอิงโดย css/src/*.sass
glob ตัวกรองที่ระบุจะยังคงถูกนำไปใช้ เว้นแต่จะถูกทำเครื่องหมายว่าเป็นทางเลือกโดยใช้เครื่องหมาย ?
คำนำหน้า
พฤติกรรมนี้สามารถทริกเกอร์ได้ด้วยการตั้งค่าแอตทริบิวต์ debug
บนแท็ก:
{% stylesheets 'css/*' debug = true %} ... {% stylesheets %}
เนื้อหาเหล่านี้จำเป็นต้องเขียนลงในสารบบเว็บ เพื่อให้ URL เหล่านี้ไม่ส่งคืนข้อผิดพลาด 404
<?php
use assetic AssetWriter ;
use assetic Extension Twig TwigFormulaLoader ;
use assetic Extension Twig TwigResource ;
use assetic Factory LazyAssetManager ;
$ am = new LazyAssetManager ( $ factory );
// enable loading assets from twig templates
$ am -> setLoader ( ' twig ' , new TwigFormulaLoader ( $ twig ));
// loop through all your templates
foreach ( $ templates as $ template ) {
$ resource = new TwigResource ( $ twigLoader , $ template );
$ am -> addResource ( $ resource , ' twig ' );
}
$ writer = new AssetWriter ( ' /path/to/web ' );
$ writer -> writeManagerAssets ( $ am );
assetic ขึ้นอยู่กับไลบรารี Python webassets (มีอยู่บน GitHub)