PDA

View Full Version : تم برای ماژول



hooman.pro
پنج شنبه 08 آبان 1393, 13:26 عصر
میخواستم بدونم که اگر برای ماژول ادمین بخواهم یک تم تعریف کنم که از آن استفاده کند دقیقا باید ساختار پوشه بندیم چه طور باشه؟ من داخل پوشه تمی که برای کل سایت نوشته بودم در کنار پوشه ویوز یک پوشه ساختم و نامش را نام ماژول گذاشتم دخلش هم یک پوشه به نام ویوز اما کار نکرد×؟؟؟؟؟؟؟؟؟؟


if(isset(Yii::app()->theme->name)){
$controller->layout = 'webroot.themes.'.Yii::app()->theme->name.'.modules.Admin.views.layouts.adminLayout';
}else{
$controller->layout = 'adminLayout';
}


این رو هم توی beforeControllerAction ماژول گزاشتم فقط تونستم باهاش فایل layout رو تغییر بدم تا از جای دیگر بخونه اما همچنان فایل های ویو را از همون پوشه ویو ماژول ادمین میخونه

hooman.pro
پنج شنبه 08 آبان 1393, 14:28 عصر
در واقع اگر کدی به من بگین که باهاش بتونم بگم تابع render ویو ها رو از کدام پوشه بخونه درست میشه کامل مثلا دنبال یه همچین چیزی هستم:


$controller->viewPath= 'address';

hooman.pro
پنج شنبه 08 آبان 1393, 15:54 عصر
چیزی که متوجه شدم اینه که ظاهرا در yii به صورت پیشفرض امکان تم دادن به ماژول ها نیست؟؟؟ درسته دوستان؟
و اومدم یه کلاس نوشتم و تابع getViewPath رو یکسری تغییرات دادم درونش و کنترولر های ماژولم رو از اون مشتق کردم کلاس:


class ModuleController extends CController
{
/**
* @var array context menu items. This property will be assigned to {@link CMenu::items}.
*/
public $menu=array();
/**
* @var array the breadcrumbs of the current page. The value of this property will
* be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
* for more details on how to specify this property.
*/
public $breadcrumbs=array();


public function getViewPath()
{
if(isset(Yii::app()->theme->name)){
$themePath= Yii::app()->theme->basePath.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_S EPARATOR.'Admin'.DIRECTORY_SEPARATOR
.'views'.DIRECTORY_SEPARATOR.Yii::app()->controller->id;
if(file_exists($themePath.Yii::app()->controller->action->id.'.php'))
return $themePath;
}
return parent::getViewPath();
}
}

الان این کامل جواب میده به این صورت که تو پوشه تم یه پوشه به اسم modules ساختم و توش پوشه ای با نام ماژولم admin و توش پوشه views
دوستان نظر بهتری دارید؟ خوب کار کردم یا اشتباه کردم و راه بهتری بوده ؟

MMSHFE
جمعه 09 آبان 1393, 11:13 صبح
شما فیلم پکیج Yii رو کامل دیدین؟ جلسه 12 ایجاد تم اختصاصی برای ماژول رو توضیح دادم و ساختار خوندن فایلهای view رو هم گفتم که چطور بارگذاری میشه. بطور خلاصه، اگه نمیخواین فیلم رو کامل بازبینی کنید، این تاپیک رو بخونید:
http://www.yiiframework.com/forum/index.php/topic/17055-how-to-theme-a-module
همچنین خوندن این لینک رو هم خیلی توصیه میکنم:
http://www.yiiframework.com/doc/guide/1.1/en/topics.theming

MMSHFE
جمعه 09 آبان 1393, 11:16 صبح
چیزی که متوجه شدم اینه که ظاهرا در yii به صورت پیشفرض امکان تم دادن به ماژول ها نیست؟؟؟ درسته دوستان؟
...

خیر اشتباهه. همونطور که گفتم، میتونید با کمک Yii::app()->theme و مقداردهیش توی init ماژول، یک تم کاملاً مستقل هم برای ماژول داشته باشین (جدا از اینکه هر تم میتونه برای ماژولها هم مشابه روشی که خودتون گفتین، قالب تعریف کنه).

hooman.pro
شنبه 10 آبان 1393, 13:22 عصر
جون تو پروژه و layout هام با ساختار قسمت مدیریتی کاملا متفاوت بود و صفحه های هم نام در قسمت اصلی و قسمت مدیریت با کنترولر های هم نام بود فکر کنم این روش که تم برای ماژول ظاهری اختصاص بده خوب باشه البته کمی دیگر تغییرات روش دادم که درست کار کنه به این صورت: ماژول ادمین:


<?php

class AdminModule extends CWebModule
{
public function init()
{
// this method is called when the module is being created
// you may place code here to customize the module or the application

// import the module-level models and components
$this->setImport(array(
'Admin.models.*',
'Admin.components.*',
));
}

public function beforeControllerAction($controller, $action)
{
if(parent::beforeControllerAction($controller, $action))
{
if( !Yii::app()->user->checkAccess("Admin") )
{
throw new CHttpException(403,Yii::t('application','You are not authorized to perform this action.'));
}
if(isset(Yii::app()->theme->name)){
$controller->layout = 'webroot.themes.'.Yii::app()->theme->name.'.modules.Admin.views.layouts.adminLayout';
}else{
$controller->layout = 'adminLayout';
}
return true;
}
else
return false;
}
}



کنترولری که کنترولر های ماژول ادمین از اون ارث میبرند


<?php
/**
* jonam bala omad ino radif kardam comment ham mikhaye!! befahmesh
*/
class ModuleController extends CController
{
/**
* @var array context menu items. This property will be assigned to {@link CMenu::items}.
*/
public $menu=array();
/**
* @var array the breadcrumbs of the current page. The value of this property will
* be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
* for more details on how to specify this property.
*/
public $breadcrumbs=array();

private $_view;


public function getViewPath()
{
if(isset(Yii::app()->theme->name)){
$themePath= Yii::app()->theme->basePath.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_S EPARATOR.'Admin'.DIRECTORY_SEPARATOR
.'views'.DIRECTORY_SEPARATOR.Yii::app()->controller->id;
if(file_exists($themePath.DIRECTORY_SEPARATOR.$thi s->_view.'.php'))
return $themePath;
}
return parent::getViewPath();
}

public function beforeRender($view) {
$this->_view=$view;
return parent::beforeRender($view);
}

}


اگر سوتی دادم بفرمایید (نیازم این بوده که ماژول رو تو یه پوشه مستقل درون تم براش ظاهر بسازم)