Yii Framework Forum: ایجاد قالب داینامیک - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

ایجاد قالب داینامیک ایجاد قالب داینامیک با Yii

#1 User is offline   sbrfarhadi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 31-August 12

Posted 24 April 2013 - 02:42 PM

سلام
بچه ها میخوام،توی سایتم چندتا قالب تعریف کنم
بعد هر یک از کاربرایی که دارم،بتونه قالب دلخواهشو انتخاب کنه و
واسه همیشه براش همون قالب بیاد مگر اینکه دوباره بخواد عوضش کنه
کسی پیشنهادی داره؟

0

#2 User is offline   Parham Doustdar 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 33
  • Joined: 02-April 11

Posted 25 April 2013 - 12:17 AM

سلام.

باید تم انتخابی کاربر رو توی database ذخیره کنید و توی کامپوننت Controller یه function init اضافه کنید که Yii::app()->theme رو ست کنه.

class Controller extends CController
{

    public function init()
    {
        if (Yii::app()->user->getState('theme'))
        {
            Yii::app()->theme = Yii::app()->user->getState('theme');
        }
        else
        {
            Yii::app()->theme = 'default';
        }
    }

}


زمانی که دارین user رو login می کنید, باید themeرو از database بگیرید و روی object UserIdentity ست کنید:

    function authenticate()
    {
        // this is just an example method of looking up usernames/passwords; your method must be more secure
        $model = User::model()->findByAttributes(array(
            'username' => $this->username,
            'password' => $this->password
        ));
        if ($model)
        {
            $this->theme = $model->theme;
        }
    }


وقتی شما روی UserIdentity یک property رو ست می کنید, اون property روی session هم ست می شه, و شما می تونید با getState() اون رو بخونید.

امیدوارم کمکتون کرده باشه.
3

#3 User is offline   sbrfarhadi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 31-August 12

Posted 25 April 2013 - 04:21 AM


دوست عزیز از راهنمایی خیلی خوبت واقعا ممنونم

اگه بخوایم داینامیک ترش بکنیم،جوری که کاربر خودش قالب بسازه و بذاره ،واسه این کسی پیشنهادی داره؟
مثل همین سی ام اس ها که طرف براش قالب میسازه و روی سایتش نصب میکنه
من میخوام هر کاربرم بتونه برای خودش با سلیقه خودش قالب بسازه و محدود به قالب من نباشه

واضح تر بگم اینکه،یه سری امکانات توی پنل مدیریت سایتم هست،
میخوام این امکان رو به
نویسنده های سایتم بدم که به سلیقه خودشون،محیطی که باهاش کار میکنن رو بچینن
مثلا یکی دوست داره منو بالا باشه،یکی دوست داره مثلا آبشاری بشه و هزار نوع دیگه که میشه
براش قالب طراحی کرد




0

#4 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 25 April 2013 - 04:39 AM

کار جالبی باید باشه. بنده خودم این کار را نکردم ولی به نظرم به این صورت نشه. باید محیطی را برای کابران ایجاد کنید تا داخل آن طرحش را بدهد و در نهاید شما فایلهای مربوطه به آن را تولید کنید.

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
0

#5 User is offline   sbrfarhadi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 31-August 12

Posted 25 April 2013 - 04:49 AM

اگه خود نویسنده بتونه قالبو خودشو بسازه و نصب کنه، خیلی کار جالبی میشه
یه دوستی چند وقت پیش توی همین فروم یه آدرس سایتی که خودشون زده بودن رو گذاشته بودن
اسم سایتش "نقد بلاگ" بود
داخلش به کاربرش اجازه ویرایش کد اچ تی ام ال را داده بود
مثلا برای هدر سایت این کدو باید داخل قالب میذاشتیم
{header}

0

#6 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 25 April 2013 - 07:08 AM

خوب دقیقا این همون محیطی است که گفته بودم برای کاربر ایجاد کنی.
بنده تونستم اینها را پیدا کنم:

http://www.yiiframew...wysiwyg-editing
http://www.yiiframew...ds-step-by-step
www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
1

#7 User is offline   sbrfarhadi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 31-August 12

Posted 25 April 2013 - 12:10 PM


ممنون
آدرسهایی که شما زحمتشو کشیدید
فکر نکنم بشه پارامترهایی که از دیتابیس میان رو داخلش قرار داد درسته؟

0

#8 User is offline   Parham Doustdar 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 33
  • Joined: 02-April 11

Posted 27 April 2013 - 01:57 AM

ایده شما مهندسی نرم افزار قوی می خواد; باید راجع بهش فکر بشه.

بستگی به کاربرها داره. اگر کاربرهای شما HTML بلد باشن, می تونید HTML هایی که خودشون می نویسن رو نگه دارید, و یه سری variable بهشون بدین (مثلا {header}, {footer}, و غیره). اما این ساده ترین حالت هست که فکر نمی کنم زیاد به دردتون بخوره.

2

#9 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 27 April 2013 - 02:32 AM


دوست عزیز لطف کنید در نوشته هایتان از تگ [rtl] استفاده کنید.
وقتی انگلیسی و فارسی را با هم می نویسید جابجا می کند.



www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
1

#10 User is offline   sbrfarhadi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 31-August 12

Posted 28 April 2013 - 04:37 AM


اومدم متد رندر رو
override
کردم

داخل
layout/main.php
توی کدهای اچ تی ام ال،علامت خاص
{title}
رو گذاشتم

بعد داخل

components/Controller.php

public function render($view,$data=null,$return=false)
    {
        if($this->beforeRender($view))
        {
            $output=$this->renderPartial($view,$data,true);
            if(($layoutFile=$this->getLayoutFile($this->layout))!==false)
                $output=$this->renderFile($layoutFile,array('content'=>$output),true);
 
            $this->afterRender($view,$output);
 			
            $output=$this->processOutput($output);
			
			$output = str_replace('{' . "title" . '}', "عنوان صفحه", $output);

            if($return)
                return $output;
            else
                echo $output;
        }
    }


کد بالا رو گذاشتم
الان با اجرا کردن صفحه
به جای
{title}
عبارت "عنوان صفحه" قرار میگیره
حالا اینش سخت نبود،مشکل ازین جا به بعدشه
یعنی بیام یه سری ویجت هایی که دارم رو به صورت داینامیک داخلش قرار بدم
مثلا با نوشتن عبارت
{menu}
ویجت منویی که خودش انتخاب کرده جایگزینش بشه
دوستان برای استفاده از این روش، و حل این مشکل نظرتون چیه؟


0

#11 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 28 April 2013 - 05:22 AM

کار جالبی می خواهید انجام بدید. پیشنهاد می کنم که مطلب را توی فروم forum.iranphp.org هم مطرح کنید. دوستان اونجا خیلی کمک می کنند حتی اگر Yii کار نکنند.
به نظرم بهتره که همونطور که Parham Doustdar عزیز گفتند، تحلیل بیشتری بکنید. حتی به دنبال یک کلاس برای این موضوع باشد.
راستی توی extension ها خود فریمورک را جستجو کرده اید شاید برای این کار کسی extension ای بیرون داده باشد.
یک کلاس CWebModule هست شاید از اون برای این موضوع بتونید استفاده کنید.

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
1

#12 User is offline   sbrfarhadi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 31-August 12

Posted 28 April 2013 - 01:58 PM

ممنون دوست عزیز بابت پیگیر بودن و راهنماییتون

یه تاپیک به این آدرس زدم
:)



اینجا کلیک کنید


0

#13 User is offline   mereeelin 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 29-October 11

Posted 28 April 2013 - 02:23 PM


سلام

من یه سیستم مدیریت شکل ظاهری درست کردم که می خواستم راه پیاده سازیشو بگم شاید به کارتون بیاد .
من اومدم سیستم رو جوری طراحی کردم که تمام اطلاعات مربوط به صفحات سایت( سمت کاربر) رو بتونیم از توی ادمین طراحی کنیم و عملا برای ساختن ظاهر سایت نیازی به کدنویسی و کوئری نوشتن نباشه و تنها با نوشتن چند بیزرول بتونید داده اه را داخل پورتلت ها وارد کنید.

این کار چند تا مزیت داره
اول اینکه دیگه هرکی هرطور بخواد نمیتونه کد بزنه و یه جور استاندارد وجود داره
دوم اینکه هسته برنامه دست نخورده میمونه و میشه راحت تر روش کار کرد و آپدیتش کرد
سرعت پیاده سازی سایت ها بسیار بالا میره
شما می تونید ابزارهایی که ازشون استفاده می کنید مانند کد های اسکریپ و اسلایدر ها یا ... رو داخل پورتلت هایی که به صورت بلک باکس ساختید قرار بدید و تنها کاری که باید بکنید ارسال داده به آنها برای نمایش خواهد بود


تکنیک استفاده شده ساده است

در مرحله اول در دیتا بیس یک جدول می سازیم که در آن انواع صفحاتی رو که داریم تعریف می کنیم مثلا صفحه اصلی ، صفحه داخلی مطالب ، صفحات لیست گیری و ....




TABLE PAGES

id name

1 mainPage
2 listPage
3 viewPage




در مرحله بعد یک جدول درست میکنیم که در آن اطلاعات مربوط به ستونهایی که هر صفحه را می سازد را نگهداری می کنیم ، به عنوان مثال اگر قرار است صفحه اول ما ۲ ستونه باشد در این جدول ۲ ستون را با نام های باکس۱ و باکس ۲ تعریف می کنیم و اگر از بوت استرپ یا بلوپرینت استفاده کرده باشید می توانید به هر کدام از این باکس ها یک کلاس اسپن اختصاص دهید که برای صفحه اول جدول مشابه این حالت خواهد بود


TABLE BOXES

id name class

1 Box1 span4
2 Box2 span8




حالا باید در جدولی دیگر باکس ها رو به صفحات اختصاص بدهید



TABLE PAGE-BOX

id page_id box_id

1 1 1
1 1 2



خب تا اینجا استایل صفحه اول رو ساختیم، البته برای ساختن استایل های پیچیده تر هم میشه به اضافه کردن یکی دو تا فیلد انجامش داد که چون پیچیده میشه الان اگه خواستید بعدا میگم براتون


حالا به یه جدول نیاز داریم که توش پرتلت ها رو تعریف کنیم ، قبل اینکه وارد این بحث بشم باید یه توضیح مختصر بدم .
من اینجوری فرض کردم که هر پرتلت داخل صفحه دارای ۲ بخشه. بخش اول ظاهره خود پرلته که شامل هدر و فوتر و رنگ بندیش میشه و بخش دوم هم محتواییه که داخل این پرتلت قرار میگیرد.
با این کار این امکان برای ما فراهم می شود که از یک پرتلت برای نمایش چندین نوع داده استفاده کنیم
برای پیاده سازی این موضوع ما به ۲ جدول نیاز داریم ، یک جدول که در آن استایل پرتلت ها را نگهداری کنیم و یک جدول هم برای سناریویی که قرار است در آن پرتلت اتفاق بیفتد

در جدول اول که مربوط به ظاهر پورتلت است ما یک اسم به پرتلت اختصاص می دهیم و نام یک فایل سی اس اس که کدهای کلاس مربوط به آن را در داخلش قرار می دهیم ،
و شما تنها نیاز دارید یک فایل پی اچ پی مثلا با اسم دیفالت بسازید که شامل کلاس هایی برای ساخت هدر ، فوتر و رنگ بندی باشد که مقادیر این کلاس ها را از فایل سی اس اس معرفی شده می خواند و اطلاعاتی هم که باید در این فایل پی اچ پی چیده شود از طریق جدول دوم که سناریو را تولید می کند تولید و به آن ارسال می شود



TABLE PORTLETS

id name cssFileAddress senario_id

1 topPages /css/redProtlets.css 1
2 lastPages /css/bluePortlets.css 2
...


TABLE PORTLET-SENARIO

id name bissrule

1 topPage 'active = 1 AND is_top =1 orderBy date DESC limit 5 '
2 lastPages 'active = 1 date DESC limit 5'
....




حالا کاری که باید بکنیم اینه که بگیم گه چه پرتلتهایی باید در کدام باکس ها قرار گیرند



TABLE BOX-PORTLETS

id box_id portlet_id
1 1 1
2 1 2
....



حالا باید مدلها را بسازید و ارتباطات را تعریف کنید
حالا شما می توانید تنها با چند تا حلقه تو در تو اطلاعات را از این جداول استخراج و در صفحات نمایش بدهید که یه چیزی میشه تو این مایه ها



$layoutID = 1;
$page = Pages::model()->findByPk($layoutID);
$boxes = $page->pageBoxRelation; // pageBoxRelation is a many to many relation between Pages and Boxes

foreach($boxes as $box){

echo '<div class=" '.$box->class.' ">;
$portlets = $box->boxPortletsRelation //boxPortletsRelation is a one to many relation between box and port lets
foreach($portlets as $portlet){
$this->widgets('application.components.portlets.defaultPortlet,
array(
'portletModel' => $portlet,
)
)
}
echo '</div>';

}




که در داخل پورتلت هم از روی مدلی که برایش ارسال کردیم بر اساس سی لس لس تعریف شده ظاهر را می سازد و با استفادا از یک رابطه یک به یک به جدول سناریو داده های داخل پورتلت را آماده می کند و نمایش میدهد .



همونطور که دیدید ایده ساده است
البته باید بگم سیستمی که در عمل پیاده کرده تعداد جداول بیشتری دارد و در جداول آن هم می توان آپشن های متنوع تری را داشت و تنها هدف من در اینجا ارائه روش بود و بسیاری از جزییات رو حذف کردم چون نمی دونستم چقدر برای شما می تونه کاربردی باشه ، برای من که بود



3

#14 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 29 April 2013 - 12:34 AM

بیا آقاجون این هم راه حلش. فقط باید یک دستی به سرو گوشش بکشی:


http://markitup.jaysalvat.com/home/
www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
2

#15 User is offline   sbrfarhadi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 31-August 12

Posted 30 April 2013 - 01:20 AM


mereeelin آقا
خواستم روشتونو پیاده کنم اما انگار توی ساخت و فراخوانی پرتلت کارم میلنگه
نمیتونم اون قسمت آخر رو پیاده کنم
من پروژه ای که ساختم با دیتابیسش که داخل همون پوشه هست
براتون ضمیمه میکنم
لطف کنید نگاه کنید

Attached File(s)

  • Attached File  test3.zip (365.98K)
    Number of downloads: 11

0

#16 User is offline   sbrfarhadi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 31-August 12

Posted 30 April 2013 - 01:27 AM

View PostShahcheraghean, on 29 April 2013 - 12:34 AM, said:

بیا آقاجون این هم راه حلش. فقط باید یک دستی به سرو گوشش بکشی:


http://markitup.jaysalvat.com/home/



آقا سجاد از پیگیر بودنت واقعا ممنونم
این ادیتوری که شما بهم معرفی کردیرو خیلی بررسی کردم
اما نمیتونم دقیقا ارتباطشو به مشکلی که دارمو متوجه بشم
این ادیتور میاد یه سری کاراکتر خاص میذاره بعد در نهایت تبدیل به اچ تی ام ال میکنه درسته؟
اما اون قسمت داینامیک بودنش و تعریف کاراکترهای خاص براش رو چطور داخلش میذارن؟

0

#17 User is offline   Shahcheraghean 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 12-December 12
  • Location:Mashhad, IRAN

Posted 30 April 2013 - 01:48 AM

نصبش کردید؟
یه چیزی توی مایه های همون چیزی است که می خواهید. نه که کلا جوابگوی کار شما باشه، بلکه از چیزهایی که داره استفاده کنید.

www.shgn.ir
www.shgn.ir/yii-framework/
yii2.swsco.ir
In a world without any fences or walls,Who needs Gates or Windows!
1

#18 User is offline   mereeelin 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 29-October 11

Posted 03 May 2013 - 05:05 AM

View Postsbrfarhadi, on 30 April 2013 - 01:20 AM, said:


mereeelin آقا
خواستم روشتونو پیاده کنم اما انگار توی ساخت و فراخوانی پرتلت کارم میلنگه
نمیتونم اون قسمت آخر رو پیاده کنم
من پروژه ای که ساختم با دیتابیسش که داخل همون پوشه هست
براتون ضمیمه میکنم
لطف کنید نگاه کنید




سلام

شما تهرانی هستید؟


0

#19 User is offline   sbrfarhadi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 47
  • Joined: 31-August 12

Posted 03 May 2013 - 05:32 AM

View Postmereeelin, on 03 May 2013 - 05:05 AM, said:


سلام

شما تهرانی هستید؟




سلام
من مازندرانی هستم
ساکن ساری
چطور؟

0

#20 User is offline   mereeelin 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 29-October 11

Posted 12 May 2013 - 11:27 AM

View Postsbrfarhadi, on 03 May 2013 - 05:32 AM, said:


سلام
من مازندرانی هستم
ساکن ساری
چطور؟




گفتم اگه تهرانی هستی ، میدیدیم ، بهت می گفتم


1

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users