<?php
namespace app\components;
use Yii;
use yii\base\InvalidConfigException;
use yii\helpers\ArrayHelper;
use yii\helpers\FileHelper;
class Theme extends \yii\base\Theme
{
public $active;
/**
* @inheritdoc
*/
public function applyTo($path)
{
$pathMap = ArrayHelper::getValue($this->pathMap,$this->active,$this->pathMap);
if (empty($pathMap)) {
if (($basePath = $this->getBasePath()) === null) {
throw new InvalidConfigException('The "basePath" property must be set.');
}
$pathMap = [Yii::$app->getBasePath() => [$basePath]];
}
$path = FileHelper::normalizePath($path);
foreach ($pathMap as $from => $tos) {
$from = FileHelper::normalizePath(Yii::getAlias($from)) . DIRECTORY_SEPARATOR;
if (strpos($path, $from) === 0) {
$n = strlen($from);
foreach ((array) $tos as $to) {
$to = FileHelper::normalizePath(Yii::getAlias($to)) . DIRECTORY_SEPARATOR;
$file = $to . substr($path, $n);
if (is_file($file)) {
return $file;
}
}
}
}
return $path;
}
}
'view'=>[
'theme' => [
'class'=>'app\components\Theme',
'active'=>'theme-default',
'pathMap' => [
'theme-default' => [
'@app/views' => ['@app/themes/theme-default/views']
],
'theme-dashboard' => [
'@app/views' => ['@app/themes/theme-dashboard/views']
]
]
],
],
$this->view->theme->active = 'theme-dashboard';
if(Yii::$app->user->identity->show_widget) {}
namespace app\extensions\components;
use yii\base\Application;
use yii\base\BootstrapInterface;
class AppBootstrap implements BootstrapInterface
{
/**
* Bootstrap method to be called during application bootstrap stage.
* @param Application $app the application currently running
*/
public function bootstrap(Application $app)
{
// Подключаем файлик с функциями
}
}
'bootstrap' => [
'app\extensions\components\AppBootstrap',
],
<?php if(!Yii::$app->user->isGuest):?>
<?=yii\helpers\Html::img( Yii::$app->user->getIdentity(true)->getAvatar() )?>
<?php endif;?>
$this->context->module
protected function saveReferralLinkUser($userModel)
{
// получение данных с формы
$referralLinks = ArrayHelper::getValue(Yii::$app->request->post('ReferralLink', []), 'slug', []);
// получение текущие данные
$referralLinkModels = ArrayHelper::map(ReferralLink::findAll(['user_id' => $userModel->id]), 'id', 'slug');
// удаление которых нет в присланных записях
foreach (array_diff($referralLinkModels, $referralLinks) as $slug) {
ReferralLink::deleteAll(['slug' => $slug]);
}
// добавление тех которых нету в присланных
foreach (array_diff($referralLinks, $referralLinkModels) as $slug) {
$referralLink = new ReferralLink(['user_id' => $userModel->id, 'slug' => $slug]);
$referralLink->save();
}
}
<?php foreach($models as $i=>$item): ?>
<?= $form->field($item,"[$i]name")->textInput(['maxlength' => 32]); ?>
<?= $form->field($item,"[$i]price"); ?>
<?= $form->field($item,"[$i]count"); ?>
<?= $form->field($item,"[$i]description"); ?>
<?php endforeach; ?>
if (Model::loadMultiple($models , Yii::$app->request->post()) &&
Model::validateMultiple($models )) {
... }
/**
* @param $params
* @param $group
* @return \yii\data\ActiveDataProvider
*/
public function search($params, $group = null )
{
$this->scenario = self::SCENARIO_SEARCH; // когда у вас много правил по умолчанию следует использовать сценарии
// базовый поиск
$query = self::find();
$dataProvider = new \yii\data\ActiveDataProvider([
'query' => $query,
]);
// Тут и нужный кастомные сценарии если базовая валидация мешает.
if (!( $this->load($params) && $this->validate())) {
return $dataProvider;
}
// применяем сортировку
$dataProvider->setSort([
'attributes' => [
'id',
]
]);
// добавляем к поиску условие например найти по диапазону даты.
if(!empty($this->dateFrom) && !empty($this->dateTo)) {
$query->andWhere('`hour_at` BETWEEN :dateFrom AND :dateTo', [
':dateFrom' => date('Y-m-d H:00:00', strtotime(trim($this->dateFrom))),
':dateTo' => date('Y-m-d H:59:59', strtotime(trim($this->dateTo))),
]);
}
// Добавляет условия если атрибуты нашей модели заполнены !=null
$query->andFilterWhere([
'stream_id' => $this->stream_id,
'country_id' => $this->country_id,
'browser' => $this->browser,
'os' => $this->os,
]);
return $dataProvider;
}
<?=GridView::widget([
'dataProvider' => $user->search(Yii::$app->request->get()),
'filterModel' => $user,
'columns' => [
'id',
'username' => [
'attribute' => 'username',
],
'email',
]]);?>
$query->join('left',Country::tableName(),'user.country_id='.Country::tableName().'.id');
$query->andFilterWhere([
Country::tableName().'.name' => $this->countryName
]);
<?php
namespace app\modules\dashboard;
class Module extends \yii\base\Module
{
public $controllerNamespace = 'app\modules\dashboard\controllers';
public function init()
{
parent::init();
$theme = ''; // Yii::$app-> ... как-то тут можно вытащить название темы которая сейчас установлена
$this->viewPath = '@app/themes/'.$theme.'/modules/'. $this->id ;
// custom initialization code goes here
}
}