Created
September 1, 2014 13:21
-
-
Save stepanselyuk/79a5532b1c946dd7c0f5 to your computer and use it in GitHub Desktop.
Component for generating JS-files for include in page
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Created by PhpStorm. | |
* Author: Stepan Seliuk <stepan@selyuk.com> | |
* Date: 30/08/14 | |
* Time: 22:33 | |
*/ | |
namespace app\components\i18n; | |
use app\components\helpers\DirHelper; | |
use app\models\AppSettingsRecord; | |
use yii\base\Object; | |
use yii\helpers\Json; | |
use yii\web\View; | |
/** | |
* Class JavaScriptMessages | |
* @package app\components\i18n | |
*/ | |
class JavaScriptMessages extends Object | |
{ | |
public $language; | |
public $expire = 3600; | |
protected $dir = '@runtime/assets/generated'; | |
function __construct( $config = [ ] ) | |
{ | |
parent::__construct( $config ); | |
if (is_null( $this->language )) { | |
$this->language = \Yii::$app->language; | |
} | |
} | |
function __toString() | |
{ | |
try { | |
return $this->getFilepath(); | |
} catch ( \Exception $e ) { | |
\Yii::error( $e->getMessage() ); | |
return false; | |
} | |
} | |
protected function getFilepath() | |
{ | |
$filePath = \Yii::getAlias( $this->dir . '/' . $this->language . '.messages.js' ); | |
/* | |
* 1. Проверяем наличие файла и валидность файла | |
* 2. Если файл валиден, возвращаем его путь, | |
* иначе запускаем процедуру генерации файла и потом возвращаем путь. | |
*/ | |
// Если файл существует | |
if (file_exists( $filePath )) { | |
$messagesFile = $this->getMessagesFilePath(); | |
if ($this->expire === 0) { | |
if (is_file( $messagesFile ) && filemtime( $messagesFile ) > filemtime( $filePath )) { | |
// Если файл с сообщениями имеет более свежую дату чем генерируемый файл | |
// Генерируем файл и возвращаем путь к нему | |
return $this->generateFile( $filePath ); | |
} else { | |
// Если включен бесконечный кеш | |
// Возвращаем путь к файлу | |
return $filePath; | |
} | |
} elseif ($this->expire === false) { | |
// Если кеш отключен | |
// Генерируем файл и возвращаем путь к нему | |
return $this->generateFile( $filePath ); | |
} else { | |
if ($this->expire > 0 && ( filemtime( $filePath ) + $this->expire > time() )) { | |
if (is_file( $messagesFile ) && filemtime( $messagesFile ) > filemtime( $filePath )) { | |
// Если файл с сообщениями имеет более свежую дату чем генерируемый файл | |
// Генерируем файл и возвращаем путь к нему | |
return $this->generateFile( $filePath ); | |
} else { | |
// Если файл валиден, кеш не истек | |
// Возвращаем путь к файлу | |
return $filePath; | |
} | |
} else { | |
// Если кеш устарел | |
// Генерируем файл и возвращаем путь к нему | |
return $this->generateFile( $filePath ); | |
} | |
} | |
} else { | |
// Если файл не существует | |
// Генерируем файл и возвращаем путь к нему | |
return $this->generateFile( $filePath ); | |
} | |
} | |
protected function getMessagesFilePath() | |
{ | |
return \Yii::getAlias( $this->dir . '/' . $this->language . '.messages.json' ); | |
} | |
protected function generateFile( $filePath ) | |
{ | |
DirHelper::create( $this->dir ); | |
$messagesPath = $this->getMessagesFilePath(); | |
if (is_file( $messagesPath )) { | |
$json = file_get_contents( $messagesPath ); | |
$data = Json::decode( $json ); | |
} else { | |
$data = [ | |
'params' => [ | |
'lang' => $this->language, | |
'source_lang' => \Yii::$app->sourceLanguage, | |
'currency' => AppSettingsRecord::getValue( 'system.currency' ) | |
], | |
'messages' => [ ] | |
]; | |
} | |
$view = new View(); | |
$render = $view->renderFile( __DIR__ . '/javascriptMessagesTpl.php', [ 'data' => $data ] ); | |
file_put_contents( $filePath, $render ); | |
return $filePath; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Created by PhpStorm. | |
* Author: Stepan Seliuk <stepan@selyuk.com> | |
* Date: 30/08/14 | |
* Time: 22:49 | |
* | |
* @var array $data | |
*/ | |
?> | |
if ( typeof window.MyApp === 'undefined' ) window.MyApp = {}; | |
MyApp.ttData = <?=json_encode($data)?>; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment