Egorka
6 years ago
16 changed files with 532 additions and 165 deletions
@ -0,0 +1,34 @@
|
||||
<?php |
||||
|
||||
use core\forms\FaviconForm; |
||||
use kartik\form\ActiveForm; |
||||
use yii\helpers\Html; |
||||
|
||||
/** |
||||
* @var yii\web\View $this |
||||
* @var FaviconForm $model |
||||
*/ |
||||
|
||||
$this->title = Yii::t('main', 'Set Favicon'); |
||||
$this->params['breadcrumbs'][] = ['label' => Yii::t('main', 'Settings'), 'url' => ['index']]; |
||||
$this->params['breadcrumbs'][] = $this->title; |
||||
?> |
||||
<div class="favicon-create"> |
||||
|
||||
<div class="box box-default"> |
||||
<div class="box-body"> |
||||
|
||||
<?php $form = ActiveForm::begin(); ?> |
||||
|
||||
<?= $form->field($model, 'image')->fileInput(['accept' => 'image/png']) ?> |
||||
|
||||
<div class="form-group"> |
||||
<?= Html::submitButton(Yii::t('buttons', 'Save'), ['class' => 'btn btn-success']) ?> |
||||
</div> |
||||
|
||||
<?php ActiveForm::end(); ?> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
@ -1,39 +0,0 @@
|
||||
<?php |
||||
/** |
||||
* Created by Error202 |
||||
* Date: 24.08.2018 |
||||
*/ |
||||
|
||||
namespace core\components; |
||||
|
||||
|
||||
class TestForm extends LanguageDynamicModel |
||||
{ |
||||
public $name; |
||||
public $content; |
||||
public $number; |
||||
|
||||
public function rules() { |
||||
return array_merge( |
||||
parent::rules(), |
||||
[ |
||||
[['name', 'content'], 'required'], |
||||
['name', 'string', 'max' => 50], |
||||
['content', 'string'], |
||||
['number', 'integer'], |
||||
] |
||||
); |
||||
} |
||||
|
||||
public function attributeLabels() { |
||||
return array_merge( |
||||
parent::attributeLabels(), |
||||
[ |
||||
'name' => \Yii::t('main', 'Name'), |
||||
'content' => \Yii::t('main', 'Key'), |
||||
'number' => \Yii::t('main', 'Value'), |
||||
] |
||||
); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,134 @@
|
||||
<?php |
||||
/** |
||||
* Created by Error202 |
||||
* Date: 03.10.2017 |
||||
*/ |
||||
|
||||
namespace core\components\favicon; |
||||
|
||||
use Yii; |
||||
use yii\imagine\Image; |
||||
use yii\web\View; |
||||
|
||||
class FaviconGenerator |
||||
{ |
||||
public $originPath; |
||||
public $cachePath; |
||||
|
||||
public function __construct() |
||||
{ |
||||
$this->originPath = Yii::getAlias('@staticRoot') . '/images/origin/favicon'; |
||||
$this->cachePath = Yii::getAlias('@staticRoot') . '/images/cache/favicon'; |
||||
} |
||||
|
||||
public function generateIcons() |
||||
{ |
||||
if (!file_exists($this->originPath)) { |
||||
mkdir($this->originPath, 0777, true); |
||||
} |
||||
|
||||
if (!file_exists($this->cachePath)) { |
||||
mkdir($this->cachePath, 0777, true); |
||||
} |
||||
|
||||
if (file_exists($this->originPath . '/favicon.png')) { |
||||
$this->generateFavicons(); |
||||
$this->generateAndroid(); |
||||
$this->generateApple(); |
||||
$this->generateMicrosoft(); |
||||
$this->generateManifestJson(); |
||||
$this->generateBrowserConfigXml(); |
||||
} |
||||
} |
||||
|
||||
protected function generateFavicons() |
||||
{ |
||||
foreach ([16, 32, 96, 194] as $s) { |
||||
$filename = sprintf('favicon-%sx%s.png', $s, $s); |
||||
|
||||
Image::thumbnail($this->originPath . '/favicon.png', $s, $s) |
||||
->save($this->cachePath . '/' . $filename); |
||||
} |
||||
} |
||||
|
||||
protected function generateAndroid() |
||||
{ |
||||
foreach ([36, 48, 72, 96, 144, 192] as $s) { |
||||
$filename = sprintf('android-chrome-%sx%s.png', $s, $s); |
||||
|
||||
Image::thumbnail($this->originPath . '/favicon.png', $s, $s) |
||||
->save($this->cachePath . '/' . $filename); |
||||
} |
||||
} |
||||
|
||||
protected function generateApple() |
||||
{ |
||||
foreach ([57, 60, 72, 76, 114, 120, 144, 152, 180] as $s) { |
||||
$filename = sprintf('apple-touch-icon-%sx%s.png', $s, $s); |
||||
|
||||
Image::thumbnail($this->originPath . '/favicon.png', $s, $s) |
||||
->save($this->cachePath . '/' . $filename); |
||||
|
||||
if ($s == 180) { |
||||
$filename = sprintf('apple-touch-icon.png', $s, $s); |
||||
|
||||
Image::thumbnail($this->originPath . '/favicon.png', $s, $s) |
||||
->save($this->cachePath . '/' . $filename); |
||||
} |
||||
} |
||||
} |
||||
|
||||
protected function generateMicrosoft() |
||||
{ |
||||
foreach ([70, 150, 270, 310] as $s) { |
||||
$filename = sprintf('mstile-%sx%s.png', $s, $s); |
||||
|
||||
Image::thumbnail($this->originPath . '/favicon.png', $s, $s) |
||||
->save($this->cachePath . '/' . $filename); |
||||
} |
||||
} |
||||
|
||||
protected function generateManifestJson() |
||||
{ |
||||
$cacheUrl = Yii::getAlias('@static') . '/images/cache'; |
||||
|
||||
// frontend |
||||
file_put_contents( |
||||
Yii::getAlias('@frontend/web') . '/' . 'manifest.json', |
||||
(new View())->render('@core/components/favicon/manifest.php', [ |
||||
'appName' => isset(Yii::$app->params['settings']['site']['name']) ? Yii::$app->params['settings']['site']['name'] : Yii::$app->name, |
||||
'iconPath' => $cacheUrl . '/favicon' |
||||
]) |
||||
); |
||||
|
||||
// backend |
||||
file_put_contents( |
||||
Yii::getAlias('@backend/web') . '/' . 'manifest.json', |
||||
(new View())->render('@core/components/favicon/manifest.php', [ |
||||
'appName' => isset(Yii::$app->params['settings']['site']['name']) ? Yii::$app->params['settings']['site']['name'] : Yii::$app->name, |
||||
'iconPath' => $cacheUrl . '/favicon' |
||||
]) |
||||
); |
||||
} |
||||
|
||||
protected function generateBrowserConfigXml() |
||||
{ |
||||
$cacheUrl = Yii::getAlias('@static') . '/images/cache'; |
||||
|
||||
// frontend |
||||
file_put_contents( |
||||
Yii::getAlias('@frontend/web') . '/' . 'browserconfig.xml', |
||||
(new View())->render('@core/components/favicon/browserconfig.php', [ |
||||
'iconPath' => $cacheUrl . '/favicon' |
||||
]) |
||||
); |
||||
|
||||
// backend |
||||
file_put_contents( |
||||
Yii::getAlias('@backend/web') . '/' . 'browserconfig.xml', |
||||
(new View())->render('@core/components/favicon/browserconfig.php', [ |
||||
'iconPath' => $cacheUrl . '/favicon' |
||||
]) |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,19 @@
|
||||
<?php |
||||
/** |
||||
* @var $this \yii\web\View |
||||
* @var $iconPath string |
||||
*/ |
||||
?> |
||||
<?= '<?xml version="1.0" encoding="utf-8"?>' ?> |
||||
|
||||
<browserconfig> |
||||
<msapplication> |
||||
<tile> |
||||
<square70x70logo src="<?= $iconPath ?>/mstile-70x70.png"/>
|
||||
<square150x150logo src="<?= $iconPath ?>/mstile-150x150.png"/>
|
||||
<square310x310logo src="<?= $iconPath ?>/mstile-310x310.png"/>
|
||||
<wide310x150logo src="<?= $iconPath ?>/mstile-310x150.png"/>
|
||||
<TileColor>#ffffff</TileColor> |
||||
</tile> |
||||
</msapplication> |
||||
</browserconfig> |
@ -0,0 +1,48 @@
|
||||
<?php |
||||
/** |
||||
* @var $this \yii\web\View |
||||
* @var $appName string |
||||
* @var $iconPath string |
||||
*/ |
||||
?> |
||||
{ |
||||
"name": "<?= $appName ?>",
|
||||
"icons": [ |
||||
{ |
||||
"src": "<?= $iconPath ?>/android-chrome-36x36.png",
|
||||
"sizes": "36x36", |
||||
"type": "image\/png", |
||||
"density": "0.75" |
||||
}, |
||||
{ |
||||
"src": "<?= $iconPath ?>/android-chrome-48x48.png",
|
||||
"sizes": "48x48", |
||||
"type": "image\/png", |
||||
"density": "1.0" |
||||
}, |
||||
{ |
||||
"src": "<?= $iconPath ?>/android-chrome-72x72.png",
|
||||
"sizes": "72x72", |
||||
"type": "image\/png", |
||||
"density": "1.5" |
||||
}, |
||||
{ |
||||
"src": "<?= $iconPath ?>/android-chrome-96x96.png",
|
||||
"sizes": "96x96", |
||||
"type": "image\/png", |
||||
"density": "2.0" |
||||
}, |
||||
{ |
||||
"src": "<?= $iconPath ?>/android-chrome-144x144.png",
|
||||
"sizes": "144x144", |
||||
"type": "image\/png", |
||||
"density": "3.0" |
||||
}, |
||||
{ |
||||
"src": "<?= $iconPath ?>/android-chrome-192x192.png",
|
||||
"sizes": "192x192", |
||||
"type": "image\/png", |
||||
"density": "4.0" |
||||
} |
||||
] |
||||
} |
@ -0,0 +1,37 @@
|
||||
<?php |
||||
/** |
||||
* Created by Error202 |
||||
* Date: 11.09.2018 |
||||
*/ |
||||
|
||||
namespace core\forms; |
||||
|
||||
use yii\base\Model; |
||||
use Yii; |
||||
|
||||
class FaviconForm extends Model |
||||
{ |
||||
public $image; |
||||
|
||||
public function rules() |
||||
{ |
||||
return [ |
||||
['image', 'required'], |
||||
[['image'], 'image', 'extensions' => 'png', 'minWidth' => 200, 'minHeight' => 200], |
||||
]; |
||||
} |
||||
|
||||
public function attributeLabels() |
||||
{ |
||||
return [ |
||||
'image' => Yii::t('main', 'Image'), |
||||
]; |
||||
} |
||||
|
||||
public function attributeHints() |
||||
{ |
||||
return [ |
||||
'image' => Yii::t('main', 'Only png files allowed. Minimum size: 200x200. Form: square'), |
||||
]; |
||||
} |
||||
} |
@ -0,0 +1,77 @@
|
||||
<?php |
||||
/** |
||||
* Created by Error202 |
||||
* Date: 03.10.2017 |
||||
*/ |
||||
|
||||
namespace core\widgets; |
||||
|
||||
use yii\base\Widget; |
||||
use yii\helpers\Url; |
||||
use Yii; |
||||
|
||||
class FaviconWidget extends Widget |
||||
{ |
||||
public $iconsPath; |
||||
public $iconsUrl; |
||||
|
||||
public function run() |
||||
{ |
||||
/** @var \yii\web\View $View */ |
||||
$View = \Yii::$app->get('view'); |
||||
|
||||
$this->iconsPath = Yii::getAlias('@staticRoot') . '/images/cache/favicon'; |
||||
$this->iconsUrl = Yii::getAlias('@static') . '/images/cache/favicon'; |
||||
|
||||
foreach ([16, 32, 96, 194] as $s) { |
||||
$filename = sprintf('favicon-%sx%s.png', $s, $s); |
||||
$filepath = $this->iconsPath . '/' . $filename; |
||||
if (!empty($filepath) && file_exists($filepath)) { |
||||
$View->registerLinkTag([ |
||||
'rel' => 'icon', |
||||
'type' => 'image/png', |
||||
'href' => Url::to(sprintf('%s/%s', $this->iconsUrl, $filename)), |
||||
'sizes' => sprintf('%sx%s', $s, $s), |
||||
], basename($filepath)); |
||||
} |
||||
} |
||||
|
||||
$filepath = $this->iconsPath . '/' . 'android-chrome-192x192.png'; |
||||
if (!empty($filepath) && file_exists($filepath)) { |
||||
$View->registerLinkTag([ |
||||
'rel' => 'icon', |
||||
'type' => 'image/png', |
||||
'href' => Url::to(sprintf('%s/android-chrome-192x192.png', $this->iconsUrl)), |
||||
'sizes' => sprintf('%sx%s', 192, 192), |
||||
], basename($filepath)); |
||||
} |
||||
|
||||
foreach ([57, 60, 72, 76, 114, 120, 144, 152, 180] as $s) { |
||||
$filename = sprintf('apple-touch-icon-%sx%s.png', $s, $s); |
||||
$filepath = $this->iconsPath . '/' . $filename; |
||||
if (!empty($filepath) && file_exists($filepath)) { |
||||
$View->registerLinkTag([ |
||||
'rel' => 'apple-touch-icon', |
||||
'type' => 'image/png', |
||||
'href' => Url::to(sprintf('%s/%s', $this->iconsUrl, $filename)), |
||||
'sizes' => sprintf('%sx%s', $s, $s), |
||||
], basename($filepath)); |
||||
} |
||||
} |
||||
$filepath = $this->iconsPath . 'mstile-144x144.png'; |
||||
if (!empty($filepath) && file_exists($filepath)) { |
||||
$View->registerMetaTag([ |
||||
'name' => 'msapplication-TileImage', |
||||
'content' => Url::to(sprintf('%s/mstile-144x144.png', $this->iconsUrl)), |
||||
], basename($filepath)); |
||||
} |
||||
|
||||
$filepath = Yii::getAlias('@webroot') . '/' . 'manifest.json'; |
||||
if (!empty($filepath) && file_exists($filepath)) { |
||||
$View->registerLinkTag([ |
||||
'rel' => 'manifest', |
||||
'href' => Url::to(sprintf('%s/manifest.json', Yii::getAlias('@web'))), |
||||
], basename($filepath)); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue