PDA

View Full Version : تفاوت render ها



hooman.pro
دوشنبه 10 شهریور 1393, 10:03 صبح
سلام تفاوت render با renderpartial رو میدونم که دومی همون قسمت رو لود میکند و layout رو صدا نمیزند. اما این توابع زیر هر کدام چیست و به چه کار می آید؟
renderClip
renderDynamic
renderDynamicInternal
renderFile
renderInternal
renderText

این همه رندر داریم تو yii !! اینا به چه کاری میان؟ تفاوتاشون چیه؟

MMSHFE
سه شنبه 11 شهریور 1393, 14:52 عصر
renderClip یک کلیپ رو که توی طراحی سایت بصورت بخشهای مجزا کاربرد داره (مفهومی شبیه پورتلت توی پورتالها) رندر میکنه و قابلیت ارسال پارامتر برای اون رو فراهم میکنه. clips توی Yii به شما این امکان رو میده که بخشی از یک ویو رو بهش اسم بدین و توی ویوی دیگه همون بخش رو صدا بزنید بدون اینکه فایل ویو جدا براش بسازین.
renderDynamic اسم یک تابع رو بصورت Callback میگیره و هرچی خروجی داد (مثلاً میتونه با وب سرویس CURL یا هر روش دیگه از هرجا میخواد اطلاعاتش رو تأمین و return کنه) در قالب Layout شما نمایش میده.
renderDynamicInternal بصورت توکار توسط renderDynamic صدا زده میشه و شما نباید صداش بزنید.
renderFile یک فایل ویو رو میگیره و رندر میکنه که این هم توی render صدا زده میشه و شما نباید صداش بزنید بطور مستقیم.
renderInternal هم داخلیه و توی renderFile و... بکار میره.
renderText هم هر متنی بهش بدین بدون استفاده از فایل view خاصی میاد توی Layout میچینه و نمایش میده.

hooman.pro
چهارشنبه 12 شهریور 1393, 11:24 صبح
استاد yii رندر یا ویجتی نداره که یک قسمت از سایت رو لایو کنه یعنی هر 10 یا 15 ثانیه یک بار به صورت ایجکسی بره محتوا رو بخونه و دوباره اونجا قرار بده؟

MMSHFE
چهارشنبه 12 شهریور 1393, 11:48 صبح
اگه میخواین با زدن یک دکمه اصلاح بشه از CHtml::ajaxButton استفاده کنید ولی اگه میخواین درفواصل زمانی خاصی این اتفاق بیفته کافیه اون بخش از صفحه رو بصورت یک ویوی وابسته در بیارین و با renderPartial صداش بزنید ازطریق AJAX
بعنوان مثال به کد زیر که توی ویوی site/index گذاشته شده دقت کنید:

<div id="container">
<p>This content is static</p>
<div id="dynamic">
<?php $this->renderPartial('_clock'); ?>
</div><!-- /#dynamic -->
</div><!-- /#container -->
<?php
Yii::app()->clientScript->registerScript('clock', '
function clock() {
$.ajax({
type: "get",
url: "' . Yii::app()->createAbsoluteUrl('site/clock') . '",
success: function(result) { $("#dynamic").html(result); }
});
}
$(document).ready(function() {
setInterval(\'clock()\', 1000);
});
');
کد ویوی site/_clock :

echo '<p>' . date('H:i:s'); . '</p>' . PHP_EOL;
کد اکشن clock :

public function actionClock()
{
$this->renderPartial('_clock');
}

hooman.pro
پنج شنبه 13 شهریور 1393, 09:18 صبح
PHP_EOL !!!!
چرا اینقدر به این دستور اعتقاد دارید و تو پکیج مقدماتی هم دایم ازش استفاده میکردین در حالی که فقط سورس رو زیبا میکنه؟؟
خوب سورس به هم ریخته باشه وقتی تحویل بروزر داده میشه. مگه چی میشه؟؟؟!! وقتی هم که سوتی داده باشیم که firebug خودش مرتب نشون میده و از اون بهم ریختگی خارج میکنه..

بابت پاسختون هم متشکرم

MMSHFE
پنج شنبه 13 شهریور 1393, 09:59 صبح
برنامه نویس خوب اونیه که سورس کدی که تحویل مرورگر میده هم مرتب باشه. این مسئله بخصوص وقتی مهم میشه که یک خطای JS داشته باشین. اینجور وقتها اگه همه سورس توی یک خط باشه و مرتب نباشه، هر خطایی میگیرین میگه توی خط 1 خطا دارین! حالا بگردین پیداش کنید!!! ولی اگه مرتب باشه، با یه نگاه به view source میتونید خطاها رو پیدا کنید. البته فقط این مسئله نیست و تورفتگیها هم خیلی مهمه. همه جا هم Firebug در دسترس نیست. فکر کنید یکهو بهتون زنگ میزنن میگن سایت مشکل داره و شما هم توی کافی نت باشین یا جایی که تنها ابزار در دسترس شما IE باشه. اونوقت میخواین با Developer Tools اینترنت اکسپلورر سروکله بزنید یا ترجیح میدین سورس کدتون خوانا و تمیز باشه؟

hooman.pro
جمعه 14 شهریور 1393, 12:14 عصر
حرفتون منطقی هست اما تا جایی که برنامه در حال develop هست وگرنه که وقتی مرحله عرضه باشه اکثرا فایل های css و js رو به صورت min شده و کاملا تو هم تحویل مرورگر میدن که زودتر تر لود بشه...

MMSHFE
جمعه 14 شهریور 1393, 12:22 عصر
والا من خودم شخصاً ترجیح میدم همیشه کدم بهینه باشه و اگه قرار به فشرده کردن باشه هم فقط CSS رو فشرده میکنم و خروجی رو هم در قالب gzip فشرده سازی میکنم که وقتی رسید به مرورگر خودش بازش کنه. این روش رو بیشتر از Dirty Coding میپسندم.