Сообщения

Сообщения за Март, 2015

Yii (модели в модуле)

Изображение
пара нюансов.
1. создание модуля

не забываем добавить модуль в конфиге

2.создание модели в модуле
в Model Path * 
нужно дописать название модуля и путь до папки с моделями
application.modules.admin.models

где admin - название модуля

3.создание crud
здесь 2 нюанса
в Model Class * 
указываем нашу модель явно
application.modules.admin.models.Page

в
Controller ID
дописываем имя модуля admin/page

4. но и это еще не все. все это хозяйство еще и подключить надо в config/main.php

    // autoloading model and component classes
    'import' => array(
        'application.models.*',
        'application.components.*',
        'application.modules.admin.models.*',
    ),


где
     'application.modules.admin.models.*', - путь до моделей в модуле.

5. если вы делаете разный интерфейс для разных модулей, то во modules/admin/views/layouts
добавьте свои лэйауты, а в контролерах моделей поменяйте

class PageController extends Controller
{
    /**
     * @var string the default lay…

Yii (выпадающее меню + ЧПУ)

Изображение
пруф
1. качаем
2.папку images в корень, папку scripts в protected
3.в layouts\main в <head> подключаем
---
 <?php         // remember that you can actually point to the js files directly if         // your script file is outside of protected/subfolders         $jqueryslidemenupath = Yii::app()->assetManager->publish(Yii::app()->basePath . '/scripts/jqueryslidemenu/');         //Register jQuery, JS and CSS files         Yii::app()->clientScript->registerCssFile($jqueryslidemenupath . '/jqueryslidemenu.css');         Yii::app()->clientScript->registerCoreScript('jquery');         Yii::app()->clientScript->registerScriptFile($jqueryslidemenupath . '/jqueryslidemenu.js');         ?> ---
4. вместо mainmenu пишем, если все хорошо - радуемся
---
<div id="myslidemenu" class="jqueryslidemenu"> <?php $this->widget('zii.widgets.CMenu',array(    'items'=>array(       array('…

Yii (debugger в 3 шага)

Изображение
пруф
1. качаем дополнение
кидаем папку yii-debug-toolbar в extensions
2.в config\main
не забудьте про  'preload' => array('log'),
     'log' => array(             'class' => 'CLogRouter',             'enabled' => true,             'routes' => array(                 #...                 array(                     'class' => 'CFileLogRoute',                     'levels' => 'error, warning',                 ),                 array(                     'class' => 'application.extensions.yii-debug-toolbar.YiiDebugToolbarRoute',                     'ipFilters' => array('127.0.0.1', '*.*.*.*'),                 ),             ),         ),     ), в ipfilters прописываем свой айпишник
3. в поключении к базе добавляем
--
 'enableProfiling'=>true, 
--

т.е. должно получиться следующее
--
return array(           'class' => …

Yii (RBAC)

Изображение
оффициальный тутор
видео по нему

в принципе все очень просто. особенно по видео.

нюансы:
1.в auth
--
   'admin' => array(         'type' => CAuthItem::TYPE_ROLE,         'description' => 'admin',                'bizRule' => null,         'data' => null     ),       '1' => array(         'type' => CAuthItem::TYPE_ROLE,         'description' => 'admin',                'bizRule' => null,         'data' => null     ), --
что 1, что admin являются именами. скорее всего вы не храните имя роли полностью и у вас есть ссылка на таблицу со списками ролей. тогда webuser.php
 --
    function getRole() {         if($user = $this->getModel()){             // в таблице User есть поле role             //return $user->id_role;             return Role::model()->findByPk($user->id_role)->name;         }     } и можно использовать такую п…

Postgres рекурсивные запросы

Запрос снизу вверх. 8 и 3 - потомки
WITH RECURSIVE temp1 ( p_id, p_parent, p_title ) AS ( SELECTT1.p_id, T1.p_parent, T1.p_titleFROM"SC_Wonder".t_page T1 WHERET1.p_id=8orT1.p_id=3unionselectT2.p_id, T2.p_parent, T2.p_titleFROM"SC_Wonder".t_page T2 INNER JOIN temp1 ON (temp1.p_parent=T2.p_id)) select*from temp1 order by p_parent desc ..
Запрос сверху вниз. элемент с прдком 0 - корневой элемент
WITH RECURSIVE temp1 ( p_id,p_parent,p_title,PATH, LEVEL, NAME ) AS ( SELECTT1.p_id,T1.p_parent, T1.p_title, CAST (T1.p_idASVARCHAR (50)) asPATH, 1 , CAST (T1.p_titleASVARCHAR (255)) as NAME FROM"SC_Wonder".t_page T1 WHERET1.p_parent=0unionselectT2.p_id, T2.p_parent, T2.p_title, CAST ( temp1.PATH||'->'||T2.p_idASVARCHAR(50)) ,LEVEL +1 , CAST ((repeat(' ', LEVEL+1)||T2.p_title) ASVARCHAR(255)) FROM"SC_Wonder".t_page T2 INNER JOIN temp1 ON( temp1.p_id=T2.p_parent)) select*from temp1 ORDER BYPATHLIMIT100 ..

Yii (дерево страниц с добавлением и удалением элементов)

Изображение
Забегу вперед, покажу что мы хотим получить


Пойдем по шагам. Подразумевается, что yii у вас установлен и настроен. Если нет, то смотрите как это делается в предыдущих уроках.
1. Создаем таблицу.
Я решил работать с PostgreSQL поэтому DDL такой

CREATETABLE "SC_Wonder".t_page ( p_id SERIAL, p_title TEXTNOT NULL, p_link TEXT, p_parent INTEGER, p_order INTEGER, p_type INTEGER, p_comment TEXT ) WITH (oids = false); COMMENT ON TABLE "SC_Wonder".t_page IS 'таблица страниц'; COMMENT ON COLUMN "SC_Wonder".t_page.p_id IS 'ид'; COMMENT ON COLUMN "SC_Wonder".t_page.p_title IS 'название'; COMMENT ON COLUMN "SC_Wonder".t_page.p_link IS 'ссылка'; COMMENT ON COLUMN "SC_Wonder".t_page.p_parent IS 'предок'; COMMENT ON COLUMN "SC_Wonder".t_page.p_order IS 'позиция'; COMMENT ON COLUMN "SC_Wonder".t_page.p_type IS 'тип'; COMMENT ON COLUMN "SC_W…

Yii (резиновый сайт)

Изображение
Если вам надоела статика вашего сайта, Можно растянуть его на всю страницу.
Лезем в layouts/column2
здесь видим примерно следующее

<?php $this->beginContent('//layouts/main'); ?>
<div class="container">
    <div class="span-24">
        <div id="content">
            <?php echo $content; ?>
        </div><!-- content -->
    </div>
    <div class="span-5 last">
        <div id="sidebar">

вот эти классы и отвечают за размер колонок.

Большинство настроек css лежит в css\screen.css
Находим

/* grid.css */
.container {width:950px;margin:0 auto;} 

- это общая ширина страницы.
Ставим

.container {width:100%;margin:0 auto;}

Ниже находим свои стили

.span-5 {width:190px;}

меняем на

.span-5 {width:150px;float:left;}

для<div class="span-5 last">
можно определить свое свойство

lastleft  

тогда для<div class="span-5 lastleft">

.lastleft {left: 15px;position: absolu…

Yii (вход по AD LDAP )

Изображение
http://des1roer.blogspot.ru/2015/02/yii.html
Сделано под впечатлением http://habrahabr.ru/post/177873/
Хочу поделиться опытом по LDAP Active Directory (про другие LDAP не знаю, не сталкивался).
Нулевое -  подключаем расширение LDAP к PHP. В OpenServer это так

раскоментить ..\OpenServer\userdata\config
в PHP-5.4_php.ini (ну или какой пхп) строчку
extension=php_ldap.dll

Первое -  качаем adLdap
Кидаем в папку components и adLdap и папки (все из src)

Для начала я подключил adLdap к Yii, как компонент приложения, т.е.:

////protected/config/main.php ‘components’ => array( ... 'ldap' => array( 'class' => 'LdapComponent', 'baseDn' => 'DC=example,DC=org', //example.org 'accountSuffix' => '@example.org', 'domainControllers' => array('dc.example.org'), 'adminUsername' => 'username', 'adminPassword' =&g…

Yii (CHtml::checkBoxList храним состояние в базе)

Изображение
Большое спасибо ему
Пойдем по шагам.
1. Создаем таблицы в базе
вот дамп
//
---- Current Database: `localdb`--/*!40000 DROP DATABASE IF EXISTS `%s` */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`localdb`/*!40100 DEFAULT CHARACTER SET utf8 */; USE `localdb`; -- MySQL dump 10.13 Distrib 5.6.22, for Win32 (x86)---- Host: localhost Database: localdb-- -------------------------------------------------------- Server version 5.5.41-log/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 …