PHP code example of processfast / yii2-minify-view
1. Go to this page and download the library: Download processfast/yii2-minify-view library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
processfast / yii2-minify-view example snippets
return [
// ...
'components' => [
// ...
'view' => [
'class' => '\processfast\yii\minify\View',
'enableMinify' => !YII_DEBUG,
'concatCss' => true, // concatenate css
'minifyCss' => true, // minificate css
'concatJs' => true, // concatenate js
'minifyJs' => true, // minificate js
'minifyOutput' => true, // minificate result html page
'webPath' => '@web', // path alias to web base
'basePath' => '@webroot', // path alias to web base
'minifyPath' => '@webroot/minify', // path alias to save minify result
'jsPosition' => [ \yii\web\View::POS_END ], // positions of js files to be minified
'forceCharset' => 'UTF-8', // charset forcibly assign, otherwise will use all of the files found charset
'expandImports' => true, // whether to change @import on content
'compressOptions' => ['extra' => true], // options for compress
'excludeFiles' => [
'jquery.js', // exclude this file from minification
'app-[^.].js', // you may use regexp
],
'excludeBundles' => [
\dev\helloworld\AssetBundle::class, // exclude this bundle from minification
],
// Extra options added in this extention fork
'S3Upload'=> true,
'awsBucket'=> null,
'assetsFolderPathPatch'=>null,
'backendCheck'=>false,
'folderName'=>'minify',
// This 2 options only used when you are generating from Script before deployment from Console Controller
'modifyPath'=>false,
'modifyPathData'=>"",
'layoutPrefixArray'=>[],
'layoutPrefixCss'=>false,
'layoutPrefixJS'=>false
]
]
];
//bundles-minify.php
if( YII_DEBUG )
{
$jquery = "https://code.jquery.com/jquery-2.2.4.js" ;
}
else
{
$jquery = "https://code.jquery.com/jquery-2.2.4.min.js" ;
}
return [
'yii\web\JqueryAsset' => [
'js'=>[$jquery]
],
'common\assets\HighchartsAsset' => [
'depends'=>[
'yii\web\JqueryAsset'
],
],
'yii\web\YiiAsset' => [
'depends'=>[
'common\assets\HighchartsAsset'
],
],
'yii\validators\ValidationAsset' => [
'depends'=>[
'yii\web\YiiAsset'
],
],
'yii\widgets\ActiveFormAsset' => [
'depends'=>[
'yii\validators\ValidationAsset'
],
],
'yii\bootstrap\BootstrapAsset' => [
'css' => [], // do not use yii default one,
'depends'=>[
'yii\widgets\ActiveFormAsset'
],
],
'yii\widgets\MaskedInputAsset' => [
'depends'=>[
'yii\bootstrap\BootstrapAsset'
],
],
'yii\jui\JuiAsset' => [
'depends'=>[
'yii\widgets\MaskedInputAsset'
],
],
'common\assets\MomentJsAsset' => [
'depends'=>[
'yii\jui\JuiAsset'
],
],
'common\assets\CDNAsset' => [
'depends'=>[
'common\assets\MomentJsAsset'
],
],
'mihaildev\ckeditor\Assets' => [
'depends'=>[
'common\assets\CDNAsset'
],
],
'yii\bootstrap\BootstrapPluginAsset' => [
'depends'=>[
'mihaildev\ckeditor\Assets'
],
],
'kartik\form\ActiveFormAsset' => [
'depends'=>[
'yii\bootstrap\BootstrapPluginAsset'
],
],
'kartik\time\TimePickerAsset' => [
'depends'=>[
'kartik\form\ActiveFormAsset'
],
],
'kartik\file\SortableAsset' => [
'depends'=>[
'kartik\time\TimePickerAsset'
],
],
'kartik\file\DomPurifyAsset' => [
'depends'=>[
'kartik\file\SortableAsset'
],
],
'kartik\file\FileInputAsset' => [
'depends'=>[
'kartik\file\DomPurifyAsset'
],
],
'kartik\dropdown\DropdownXAsset' => [
'depends'=>[
'kartik\file\FileInputAsset'
],
],
'kartik\base\WidgetAsset' => [
'depends'=>[
'kartik\dropdown\DropdownXAsset'
],
],
'common\assets\FontAwesomeAsset' => [
'depends'=>[
'kartik\base\WidgetAsset'
],
],
'common\assets\IonIconsAsset' => [
'depends'=>[
'common\assets\FontAwesomeAsset'
],
],
'common\assets\JqueryCreditCardValidatorAsset' => [
'depends'=>[
'common\assets\IonIconsAsset'
],
],
'common\assets\ListJsAsset' => [
'depends'=>[
'common\assets\JqueryCreditCardValidatorAsset'
],
],
'common\assets\MustacheJsAsset' => [
'depends'=>[
'common\assets\ListJsAsset'
],
],
'common\assets\JsCookieAsset' => [
'depends'=>[
'common\assets\MustacheJsAsset'
],
],
'common\assets\BootstrapDaterangePickerAsset' => [
'depends'=>[
'common\assets\JsCookieAsset'
],
],
'common\assets\BootstrapDateTimePickerAsset' => [
'depends'=>[
'common\assets\BootstrapDaterangePickerAsset'
],
],
'common\assets\BootstrapSwitchAsset' => [
'depends'=>[
'common\assets\BootstrapDateTimePickerAsset'
],
],
'common\assets\AdminLTEAsset' => [
'depends'=>[
'common\assets\BootstrapSwitchAsset'
],
],
'common\assets\AppAssetVersion2' => [
'depends'=>[
'common\assets\AdminLTEAsset'
],
],
'common\assets\AppAsset' => [
'depends'=>[
'common\assets\AppAssetVersion2'
],
],
] ;
// start of config/main.php
// removing js and css files being loaded on AJAX call
$bundles = "bundles-minify.php"; // having dependencies
$bundlesFiles = $bundlesFiles = false ;
}
// helper function should be added in helper file to achieve this.
public static function getPathIdentical( $path )
{
if( strpos( $path , "_protected" ) !== false )
{
return self::sliceIt( $path , "_protected");
}
else if( strpos( $path , "themes" ) !== false )
{
return self::sliceIt( $path , "themes");
}
else
{
if( YII_DEBUG && strpos( $path , "minify-final" ) === false)
{
echo "Let Jaimin MosLake Know this happen. We made asset bundle with new directory. Add dependecny.";
echo $path;
exit;
}
}
return $path ;
}
public static function sliceIt( $path , $sliceBy )
{
$explodeArray = explode( $sliceBy , $path );
$backString = null;
if( sizeof($explodeArray) >= 2 )
{
$backString = $sliceBy.$explodeArray[1];
}
return $backString;
}
namespace console\controllers;
define('RUNNING_FROM_CONSOLE', true );
use common\assets\AppAssetVersion2;
use common\assets\HighchartsAsset;
use common\components\AppBasic;
use yii\console\Controller;
use processfast\yii\minify\View;
use common\assets\AppAsset;
use processfast\yii\minify\components\CSS;
use processfast\yii\minify\components\JS;
use Yii;
use yii\web\AssetBundle;
$url = "/dev/{application-folder-name}/" ;
\Yii::setAlias('@webroot', \Yii::$app->basePath."/../../" );
\Yii::setAlias('@web', $url );
class AssetMinifyController extends Controller
{
public function actionInit()
{
ini_set( 'max_execution_time' , 480 );
$url = "/dev/{application-folder-name}/" ;
$webroot = \Yii::$app->basePath."/../../" ;
$web = $url ;
$view = new View();
$view->S3Upload = true ;
$view->awsBucket = 'aws-bucket-name' ;
$view->assetsFolderPathPatch = '../../' ;
$view->enableMinify = true ;
$view->concatCss = true ; // concatenate css
$view->minifyCss = true ; // minificate css
$view->concatJs = true ; // concatenate js
$view->minifyJs = true ; // minificate js
$view->minifyOutput = true ; // minificate result html page
$view->webPath = $web ;
$view->basePath = $webroot ; // path alias to web base
$view->minifyPath = $webroot.'/minify' ; // path alias to save minify result
$view->jsPosition = [ \yii\web\View::POS_END ] ; // positions of js files to be minified
$view->forceCharset = 'UTF-8' ; // charset forcibly assign, otherwise will use all of the files found charset
$view->expandImports = true ; // whether to change @import on content
$view->compressOptions = ['extra' => true]; // options for compress
$view->excludeFiles = ['jquery.js', // exclude this file from minification
'app-[^.].js', // you may use regexp
];
$view->excludeBundles = [];
$view->modifyPath = true ;
$view->modifyPathData = '_protected/console/../../' ;
$bundlesFiles = Yii::$app->params['bundles_minify'] ;
$view->assetManager->bundles = $bundlesFiles ;
$this->layout = "public_pages" ;
$view->registerAssetBundle( AppAsset::className() );
$assetBundle = $view->assetBundles ;
// Revering it as it register asset bundle in reverse order. This array has reverse dependency
// reversing array to give reverse dependency
$assetBundle = array_reverse( $assetBundle );
$this->assetBundleRegistration( $view , $assetBundle );
(new CSS($view))->export();
(new JS($view))->export();
// exporting CSS/JS for new layout
$this->layout = "main" ;
$view->assetBundles = [] ;
$view->cssFiles = [] ;
$view->jsFiles = [] ;
//AppAssetVersion2 is the main AssetBundle to "main" layout
$view->registerAssetBundle( AppAssetVersion2::className() );
$assetBundle = $view->assetBundles ;
// Revering it as it register asset bundle in reverse order. This array has reverse dependency
// reversing array to give reverse dependency
$assetBundle = array_reverse( $assetBundle );
$this->assetBundleRegistration( $view , $assetBundle );
(new CSS($view))->export();
(new JS($view))->export();
}
public function assetBundleRegistration( $view , $assetBundle)
{
foreach (array_keys( $assetBundle ) as $name) {
if (!isset($view->assetBundles[$name])) {
return;
}
$bundle = $view->assetBundles[$name];
if ($bundle) {
foreach ($bundle->depends as $dep) {
$this->assetBundleRegistration( $view , [$dep] );
}
$bundle->registerAssetFiles($view);
}
unset($view->assetBundles[$name]);
}
}
public function registerBundle($view, $bundles, $name, &$registered)
{
if (!isset($registered[$name])) {
$registered[$name] = false;
$bundle = $bundles[$name];
foreach ($bundle->depends as $depend) {
$this->registerBundle($view, $bundles, $depend, $registered);
}
unset($registered[$name]);
$registered[$name] = $bundle;
} elseif ($registered[$name] === false) {
throw new Exception("A circular dependency is detected for target.");
}
}
}