Архив

Публикации с меткой ‘yii’

Мультиязычный проект на Yii

10 Ноябрь 2011 Михаил Comments off

Multilanguage В сети полно тем о том как использовать мультиязычность в Yii (вот например), но мне нужно было простое и гибкое решение. air jordan 6 Нужно просто переключать язык перевода в конфиге в зависимости от корневой директории, Nike KD 9 без переделки существующих контроллеров. adidas femme soldes ugg boots uk Вот получилось такое решение внутри config.php (не знаю на сколько красиво в конфиге проводить какие-то операции, но работает безотказно):

 <?php // uncomment the following to define a path alias // Yii::setPathOfAlias('local','path/to/local-folder'); // This is the main Web application configuration. Any writable // CWebApplication properties can be configured here.  <a href="https://www.mu2legendzen.com/">legend zen for sale</a> <a href="http://www.rgmwebmedia.nl/ray-ban.html">Ray Ban</a> // set default $lang = 'en'; // lang list (path=>Yii I18N name) $i18n = array( 'de'=>'de', <a href="http://www.amour-strasbourg.fr/basket-new-balance-lyon.html">basket new balance lyon</a> 'el'=>'el', 'en'=>'en', 'es'=>'es', 'fr'=>'fr', <a href="http://www.olympiacosyouthfc.co.uk/air-max-2016.html">air max 2016</a> 'hu'=>'hu', 'pt'=>'pt', 'ru'=>'ru', <a href="http://www.craigburnfarmhouse.co.uk/ugg-mini-bailey-button.html">ugg mini bailey button</a> <a href="http://www.collegefootballpro.com/">College Football Jerseys</a> 'ua'=>'uk', <a href="http://www.italiatour.co.uk/new-balance-red.html">new balance red</a> ); if ($_SERVER['REQUEST_URI']) { $uri=explode('/',$_SERVER['REQUEST_URI']); if (isset($uri[1])&&isset($i18n[$uri[1]])) $lang = $uri[1]; } return array( ... 'sourceLanguage' => 'en', 'language' => $i18n[$lang], ... <a href="http://www.goodsellerairmax.com/">Cheap Nike Air Max 2017</a> 'urlManager'=>array( 'urlFormat'=>'path', 'showScriptName'=>false, <a href="http://www.olympiacosyouthfc.co.uk/women-kevin-durant.html">Women Kevin Durant</a> 'rules'=>array( $lang.'/<module>/<controller:\w+>/<id:\d+>'=>'<module>/<controller>/view', $lang.'/<module>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<module>/<controller>/<action>', <a href="http://www.ranchdelablache.fr/">Nike air max pas cher</a> $lang.'/<module>/<controller:\w+>/<action:\w+>'=>'<module>/<controller>/<action>', $lang.'/<controller:\w+>/<id:\d+>'=>'<controller>/view', $lang.'/</controller><controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', $lang.'/<controller:\w+>/<action:\w+>'=>'<controller>/<action>', ), <a href="http://www.lesfriandsdisent.fr/adidas-y3.html">adidas y3</a> ), ... );

И мне не нравиться, nike air max 2017 heren что в Yii украинский язык почему-то uk и по-этому я использую алиасы, т.е.

Categories: Coding Tags: , ,

Миграция с данными из файла в Yii framework

6 Июнь 2011 Михаил Comments off

migrate-439x315 Из проекта в проект, приходится зачастую таскать всякие справочники немалого размера (например справочник регионов – у меня порядка 20K записей в дереве nestedset). nike air zoom schoenen Логичнее всего грузить этот файл средствами MySQL и на помощь тут нам приходит LOAD DATA INFILE. Читать далее…

Categories: Coding Tags: , , ,

Подсветка текста в zii

23 Ноябрь 2010 Михаил Comments off

Marked search text for zii

Все пользуются замечательными виджетами из пакета zii в Yii framework, но иногда в них не хватает приятных мелочей, которые могли бы улучшить их вид. Asics Gel Lyte 3 Pas Cher Вот я и решил показать как можно приукрасить виджет zii.widgets.grid.CGridView подсвечивая текст при использовании поиска в текстовых полях. mu2legendzen fjallraven kanken pas cher

За вывод в ячеек таблицы отвечает класс пакета zii CDataColumn::renderDataCellContent() который мы и будем менять. Nike Air Max 2016 Heren wit Ну точнее не менять (менять сорсы фреймворка некрасиво), а сделаем свой виджет унаследовавшись от него. Maglie Houston Rockets

Создаем новый класс UDataColumn.php в директории для расширений (/protected/extensions/), который унаследуем от от вышеуказанного. Scarpe Nike Online Shop Outlet

 Yii::import('zii.widgets.grid.CGridColumn'); class UDataColumn extends CDataColumn { protected function renderDataCellContent($row,$data) { if($this->value!==null) $value=$this->evaluateExpression($this->value,array('data'=>$data,'row'=>$row)); else if($this->name!==null) $value=CHtml::value($data,$this->name); if ($value===null) { echo $this->grid->nullDisplay; } else { if ($this->grid->filter->attributes[$this->name]) { $find_replace = array(trim($this->grid->filter->attributes[$this->name])=>'<span class="marktext">'.trim($this->grid->filter->attributes[$this->name]).'</span>'); $parts = preg_split('/(< (?:\?[^?]+\?>|[A-Za-z]+(?:[^">]+|"[^"]*")*|!(?:\[CDATA\[(?:[^\]]+|](?:[^\]]|][^>]))*]]|--(?:[^-]+|-(?!->))*--))>)/', $this->grid->getFormatter()->format($value,$this->type), -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); foreach ($parts as $part) { if(!preg_match('/^< (a|img|h)/i',$part)) $part = strtr($part,$find_replace); echo $part; } } else { echo $this->grid->getFormatter()->format($value,$this->type); } } } }

Но это класс не виджета, по-этому еще создаем файл (UGridView.php) уже с самим виджетом и заменяем в нем методы использующие CDataColumn и добавляем новый CSS стиль для подсветки при инициализации виджета.

Yii::import('zii.widgets.grid.CGridView'); Yii::import('ext.UDataColumn'); class UGridView extends CGridView { public function init() { parent::init(); $css =' /* UGridView marked text */ .grid-view .marktext { font-weight: bold; } '; $cs = Yii::app()->getClientScript(); $cs->registerCss(__CLASS__.'#form', $css); Yii::app()->getClientScript()->registerCssFile($this->cssFile); } /** * Creates column objects and initializes them. <a href="http://www.sacadoskanken.fr/">sac a dos fjallraven kanken femme</a> */ protected function initColumns() { if($this->columns===array()) { if($this->dataProvider instanceof CActiveDataProvider) $this->columns=$this->dataProvider->model->attributeNames(); else if($this->dataProvider instanceof IDataProvider) { // use the keys of the first row of data as the default columns $data=$this->dataProvider->getData(); if(isset($data[0]) && is_array($data[0])) $this->columns=array_keys($data[0]); } } $id=$this->getId(); foreach($this->columns as $i=>$column) { if(is_string($column)) $column=$this->createDataColumn($column); else { if(!isset($column['class'])) $column['class']='UDataColumn'; $column=Yii::createComponent($column, $this); } if(!$column->visible) { unset($this->columns[$i]); continue; } if($column->id===null) $column->id=$id.'_c'.$i; $this->columns[$i]=$column; } foreach($this->columns as $column) $column->init(); } /** * Creates a {@link CDataColumn} based on a shortcut column specification string. <a href="http://www.sfgiantsuniform.com/authentic/madison-bumgarner-authentic-jersey.html">Madison Bumgarner Authentic Jersey</a> * @param string $text the column specification string * @return CDataColumn the column instance */ protected function createDataColumn($text) { if(!preg_match('/^([\w\.]+)(:(\w*))?(:(.*))?$/',$text,$matches)) throw new CException(Yii::t('zii','The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.')); $column=new UDataColumn($this); $column->name=$matches[1]; if(isset($matches[3])) $column->type=$matches[3]; if(isset($matches[5])) $column->header=$matches[5]; return $column; } }

Теперь везде (по-умолчанию данный виджет используется в admin.php) заменяем старый виджет

...  <a href="https://www.mu2legendzen.com/">buy mu legend zen</a> <a href="http://www.alumip.fr/stats/ctry_usage/">nike air max femme pas cher</a> $this->widget('zii.widgets.grid.CGridView', array( ...

на новый

... <a href="http://www.thefashionoutlet.nl/new-balance-heren.html">New Balance Heren</a> $this->widget('ext.UGridView', array( ... <a href="http://www.sacadosfjallraven.fr/">sac fjallraven pas cher</a>

и наслаждаемся подсветкой текста как тут.

Categories: Coding Tags: , , ,

Yii-User и Yii PHP Framework

21 Октябрь 2010 Михаил 2 comments

Не так давно появился неплохой на мой взгляд фреймворк на PHP – Yii PHP Framework, и более-менее нормальной документацией и даже русскоязычным сообществом. Nike Air Max 2016 Heren groen Но при разработке любого приложения почти всегда требуется регистрировать и авторизировать пользователя, а так же управлять учетными записями пользователей. asics gel lyte air max Для этих целей можно использовать уже готовое решение Yii-User. adidas homme comprar mochilas kanken Скачиваем модуль и распаковываем в свое приложение в директорию /protected/modules. adidas 2017 pas cher Добавляем в конфиг следующие записи (config/main.php)

return array( #...  <a href="http://www.garforthgreenlane.co.uk/asics-shoes.html">asics shoes</a> // autoloading model and component classes 'import'=&gt;array( 'application.models.*', 'application.components.*', 'application.modules.user.models.*', 'application.modules.user.components.*', ), // Для включения русского языка добавляем в конфиг 'sourceLanguage' => 'en', 'language' => 'ru', #... <a href="http://www.decoq.nl/">Kopen nike air max schoenen</a> 'modules'=&gt;array( 'user', // или 'user'=>array(параметры модуля), ), #...  <a href="http://www.inizioristorante.fr/adidas-ultra-boost.html">adidas ultra boost</a> <a href="http://www.cheapfjallravenkanken.co.uk/">cheap fjallraven kanken</a> // application components 'components'=&gt;array( #...  <a href="http://www.lesfriandsdisent.fr/adidas-noir.html">Adidas Noir</a> <a href="http://www.centergarden.it/">Scarpe Adidas</a> 'user'=&gt;array( // enable cookie-based authentication 'allowAutoLogin'=&gt;true, 'loginUrl' =&gt; array('/user/login'), ), #... ), #...  <a href="http://www.citylodgeyeovil.co.uk/adidas-springblade.html">adidas springblade</a> <a href="http://www.lepezou.fr/">nike air max pas cher</a> );

Далее добавляем таблицы модуля в БД из файла дампа modules/user/data/schema.mysql.sql (по умолчанию используются таблицы с префиксом «tbl_», для этого необходимо в конфиге ‘db’ добавить ‘tablePrefix’ => ‘tbl_’ или изменить префикс таблиц на используемые в вашем приложении). Nike Air Max 2014 Men Добавляем новые пункты в меню шаблон (protected/views/layouts/main.php) удалив старые

array('url'=&gt;Yii::app()-&gt;getModule('user')-&gt;loginUrl, 'label'=&gt;Yii::app()-&gt;getModule('user')-&gt;t("Login"), 'visible'=&gt;Yii::app()-&gt;user-&gt;isGuest), array('url'=&gt;Yii::app()-&gt;getModule('user')-&gt;registrationUrl, 'label'=&gt;Yii::app()-&gt;getModule('user')-&gt;t("Register"), 'visible'=&gt;Yii::app()-&gt;user-&gt;isGuest), array('url'=&gt;Yii::app()-&gt;getModule('user')-&gt;profileUrl, 'label'=&gt;Yii::app()-&gt;getModule('user')-&gt;t("Profile"), 'visible'=&gt;!Yii::app()-&gt;user-&gt;isGuest), array('url'=&gt;Yii::app()-&gt;getModule('user')-&gt;logoutUrl, 'label'=&gt;Yii::app()-&gt;getModule('user')-&gt;t("Logout").' ('.Yii::app()-&gt;user-&gt;name.')', 'visible'=&gt;!Yii::app()-&gt;user-&gt;isGuest),

Все готово, теперь авторизируемся используя логин/пароль – admin/admin и настраиваем необходимые поля профиля для пользователей. new balance blanc Adidas Schoenen Возможные параметры модуля можно найти в таблице тут.

Categories: Coding Tags: , , ,