دکمه های سفارشی برای ستون های GridView – قسمت دوم

برای اینکه در ستون دکمه ها، دکمه ای دیده شود یا نه، یک option در CButtonColumn که از CGridColumn اکستند شده وجود دارد که شما می توانید به آن مقدار true یا false را بدهید تا دکمه مربوطه نمایش داده بشود یا نه.

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

لطفا به خط ۲۳ توجه کنید،

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'myGrid',
    'dataProvider' => $model->search(),
	'filter' => $model,
	'columns' => array(
        'firstName',
        'lastName',
		array(
			'class' => 'CButtonColumn',
			'template' => '{view}{update}{export}',
			'buttons' => array(
				'view' => array(
					'url' => 'Yii::app()->createUrl("somewhereElse/view" , array("id"=>$data->id))',
				),
				'export' => array(
					'icon' => 'picon-road pmenu',
					'label'=>Yii::t('export','create'),
					'url' => 'Yii::app()->createUrl("export/create", array("id" => "$data->id"))',//custom url
					'options' => array(
						'style' => 'color: #666666;text-decoration:none;', // set additional html styles for this button
						'class'=>'customClass',
					),
					'visible' => function($row ,$data){
						$userId = Yii::app()->user->id;
						
						if($data->userId == $userId) // some logic to check is allowed to see this button
							return true;
						else
							return false;
					},
				),
			),
        )
    ),
));

موفق باشید

دوره آموزشی طراحی و تولید یک برنامه کاربردی امروزی و کارآمد شرکت پیشتازان توسعه

شرکت پیشتازان توسعه دوره آموزشی برنامه نویسی php با فریم ورک Yii را برگزار می کند.

سایت مربوطه

Yii-Final-poster-original

پیش نیاز علمی :
یادداشتن حداقل یک زبان شی گرا و نوشتن یک برنامه روی آنها

سر فصل دوره
چرا Yii : بررسی سادگی، کارآمدی ، انعطاف پذیری و جایگاه آن نسبت به بقیه.
معماری MVC و تشریح اجزا Model-View-Controller.
بررسی ORM، Active Record و فرایند پاسخگویی به یک درخواست.
ساخت بانک اطلاعاتی و ارتباط با فریمورک
فرآیند تحلیل و طراحی کلاسهای برنامه .
تولید کدهای اتومات از روی بانک اطلاعاتی.
مدیریت کاربران و احراز هویت.
معرفی شیوه های کنترل دسترسی
MAC
DAC
RBAC
تغییرات فرمها با استفاده از Ajax و CHTML
ایجاد Widget، Module
طراحی Template : منو، هدر، navigation، breadcrumb ، فوتر
مباحث پیشرفته : کنترل خطا، لاگ، Caching

ایمپورت کردن معمول کلاس ها در php در مقابل مدل Yii

با سلام
فرق بین require و require_once با include و include_once مشخص است ولی وقتی از فریم ورک Yii استفاده می کنیم آیا بهتر است از توابع بالا استفاده کنیم یا از تابع import خود فریم ورک؟
تابع import در به نام فایل حساس است. منظورم این است که مثلا وقتی کلاسی به نام House را در فایلی با نام House.php ایمپورت می کنیم، تا وقتی که در کد کلاس House استفاده نشود، آن فایل در حافظه قرار نمی گیرد.
این کارکرد در مقابل عملکرد require و include از لحاظ سرعت و مصرف حافظه بسیار مفید است ولی باید با ملاحظه استفاده شود چون اگر شما در همان فایل، کلاس Garden را هم تعریف کرده باشید، اگر قبل از new کردن کلاس House، کلاس Garden را استفاده کنید، به ارور می خورید. چون autoload بر اساس نام، ایمپورت می کند.

موفق باشید

خواندنی درباره گرید ویوها (GridView) در فریم ورک Yii قسمت سوم

در گرید ویو ها شما برای ستون هایی که می خواهید نمایش دهید می توانید به چند صورت عمل کنید:
۱ – می توانید صرفا نام را وارد کنید :

$this->widget('bootstrap.widgets.TbGridView', array(
    'id' => 'post-grid',
    'dataProvider' => $model->search(),
    'filter' => $model,
    'columns' => array(
        'idPost',
        'title',
        'content',
        'isActive',
        'status',
        array(
            'class'=>'bootstrap.widgets.TbButtonColumn',
        ),
    ),
    'ajaxUrl' => array('post/custome' , 'param1' => $param1)
));

۲ – با نوع سریع :

'columns' => array(
        'idPost',
        'title',
        'content',
        'isActive:boolean', // <<<<-----
        'status',
        array(
            'class'=>'bootstrap.widgets.TbButtonColumn',
        ),
    ),

۳ – با یک رشته که پردازش شود:

'columns' => array(
    array( // <<<<-----
        'name' => 'idPost',
        'value' => 'CHtml::link( Yii::app()->createUrl("post/view" , array("id" => $data->idPost)) )',
    ),
    'title',
    'content',
    'isActive:boolean',
    'status',
    array(
        'class'=>'bootstrap.widgets.TbButtonColumn',
    ),
);

۴ – با یک تابع بدون نام:

'columns' => array(
    array(
        'name' => 'idPost',
        'value' => 'CHtml::link( Yii::app()->createUrl("post/view" , array("id" => $data->idPost)) )', // <<<<-----
    ),
    array( // <<<<-----
        'name' => 'title',
        'value' => function($data){
            if($data->isActive == 1)
                $html = '<h3 class="header">' . $data->title . '</h3>';
            elseif($data->status == 'flying')
                $html = '<h3 class="header"> Some thing is flying</h3>';
            //else
            // and so on
            return $html;
        },
        'type' => 'raw',
    ),
    'content',
    'isActive:boolean',
    'status',
    array(
        'class'=>'bootstrap.widgets.TbButtonColumn',
    ),
);

موفق باشید.

خواندنی درباره گرید ویوها (GridView) در فریم ورک Yii قسمت دوم

رفرش کردن گرید ویو با پارامتر های فیلتر جدید :

اگر در صفحه ای بخواهید که گرید شما بصورت آژاکسی با پارامتر های سرچ جدیدی ( مثلا تکست باکس های موجود در یک فرم ) رفرش شود و نتایج را بدون رفرش صفحه داشته باشید می توانید بصورت زیر عمل کنید :

$.fn.yiiGridView.update('my-grid', { // my-grid is id of your grid
	data: $("#searchForm").serialize() // searchForm is the id of form which we want to send data from
});

موفق باشید

خواندنی درباره گرید ویوها (GridView) در فریم ورک Yii قسمت اول

خب نمایش یک گرید در یک صفحه کار ساده ای است و همه کم و بیش با ستینگ های مختلف می توانیم نمایش دهیم. ولی وقتی که یک گرید را با شرایط خاصی و بر اساس آن شرایط ایجاد کرده ایم، مثلا بر اساس آپشن های یک فرمی که پست شده اند به همین صفحه شما و صفحه شما بر اساس آن گرید را نمایش داده است.
در این شرایط اگر شما گرید را رفرش کنید، گرید را از دست خواهید داد. چون وقتی پارامتر “ajaxUrl” را ست نکرده باشید بصورت پیش فرض همین آدرسی که در آن هستید را استفاده می کند و این صفحه شما چون پارامتر هایی که بر اساس آن گرید را نمایش داده است را ندارد، پس شما هم گرید را ندارید!
برای رفع این مشکل، پارامتر های ورودی از فرم را بصورت زیر بگیرید تا مهم نباشد که این پارامتر ها با متد POST ارسال شده اند یا GET.

$param1 = Yii::app()->request->getParam('param1' , null);

و در نهایت به گرید که رسیدیم :
$this->widget('bootstrap.widgets.TbGridView', array(
    'id' => 'post-grid',
    'dataProvider' => $model->search(),
    'filter' => $model,
    'columns' => array(
        'idPost',
        'title',
        'content',
        'idUser',
        'status',
        array(
            'class'=>'bootstrap.widgets.TbButtonColumn',
        ),
    ),
    'ajaxUrl' => array('post/custome' , 'param1' => $param1)
));

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

موفق باشید

کتاب آموزش فریم ورک Yii – قسمت اول

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

کتاب زیر مناسب مبتدی تا پیشرفته است.

Packt Web Application Development with Yii and PHP 2nd Edition 2012

این دو کتاب برای شروع کار و همچنین مرور مسایل پایه مناسب است.

Yii Blog

Yii Guide

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

آموزش ساخت نقشه Google Map – قسمت اول

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

در زیر چند نکته هست که باید دقت کنید و در ادامه به آن خواهم پرداخت:

<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 0; padding: 0 }
      #map-canvas { height: 100% }
    </style>
    <script type="text/javascript"
      src="https://maps.googleapis.com/maps/api/js?key=API_KEY&sensor=SET_TO_TRUE_OR_FALSE">
    </script>
    <script type="text/javascript">
      function initialize() {
        var mapOptions = {
          center: new google.maps.LatLng(-34.397, 150.644),
          zoom: 8,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map-canvas"),
            mapOptions);
      }
      google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
    <div id="map-canvas"/>
  </body>
</html>

در کتابخانه گوگل اضافه شده که شما بهتر است که کلید key=API_KEY را با کلیدی که می توانید از سایت گوگل بگیرید، پر کنید.این کلید معرف استفاده شما از این سرویس است و اگر هم خواستید می توانید کلا آن را بردارید.
sensor=SET_TO_TRUE_OR_FALSE را sensor=FALSE قرار دهید.

منابع :
Google Developer

بدست آوردن پسورد فراموش شده SVN

با سلام

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

این هم لینک دریافت فایل بدست آوردن پسورد svn 

منبع هم راستی یادم نمی یاد 😀