PDA

View Full Version : کاربرد evaluateExpression در CGridview چی هست؟



mostafa_shoakry
یک شنبه 27 بهمن 1392, 00:55 صبح
سلام خدمت دوستان و اساتید محترم
می خوام بدونم این خط چی کار می کنه؟


$value=$this->evaluateExpression($this->value,array('data'=>$data,'row'=>$row));


بیشتر می خوام بدونم وظیفه evaluateExpression چی هست؟
ممنون

MMSHFE
یک شنبه 27 بهمن 1392, 09:43 صبح
لطفاً بخشهای بیشتری از کدتون رو بگذارین. این دستور بیش از یک کار انجام میده. ضمناً مقدار this->value$ رو هم بگذارین. این لینک (http://www.yiiframework.com/doc/api/1.1/CComponent#evaluateExpression-detail) رو بررسی کنید.

mostafa_shoakry
یک شنبه 27 بهمن 1392, 10:58 صبح
لطفاً بخشهای بیشتری از کدتون رو بگذارین. این دستور بیش از یک کار انجام میده. ضمناً مقدار this->value$ رو هم بگذارین. این لینک (http://barnamenevis.org/www.yiiframework.com/doc/api/1.1/CComponent#evaluateExpression-detail) رو بررسی کنید.
مثلا این تابع CGridView



public function renderTableRow($row)
{
$htmlOptions=array();
if($this->rowHtmlOptionsExpression!==null)
{
$data=$this->dataProvider->data[$row];
$options=$this->evaluateExpression($this->rowHtmlOptionsExpression,array('row'=>$row,'data'=>$data));
if(is_array($options))
$htmlOptions = $options;
}

if($this->rowCssClassExpression!==null)
{
$data=$this->dataProvider->data[$row];
$class=$this->evaluateExpression($this->rowCssClassExpression,array('row'=>$row,'data'=>$data));
}
elseif(is_array($this->rowCssClass) && ($n=count($this->rowCssClass))>0)
$class=$this->rowCssClass[$row%$n];

if(!empty($class))
{
if(isset($htmlOptions['class']))
$htmlOptions['class'].=' '.$class;
else
$htmlOptions['class']=$class;
}

echo CHtml::openTag('tr', $htmlOptions)."\n";
foreach($this->columns as $column)
$column->renderDataCell($row);
echo "</tr>\n";
}


که از evaluateExpression استفاده کرده است.

MMSHFE
یک شنبه 27 بهمن 1392, 11:22 صبح
کلاً کار این تابع اینه که یکسری مقادیر رو ارزیابی کنه. اگه بعنوان پارامتر اول اسم یک متد رو بصورت رشته بدین - که به این روش میگن callback (میشه از ساختار controller/method هم استفاده کرد)، آرایه مشخص شده رو براش میفرسته و نتیجه ارزیابی اون رو برمیگردونه. اگر هم callback نفرستین (مثل کد فوق) آرایه رو به اون متدهای داخلی خود Yii میفرسته تا ارزیابی بشه. کلاً این کد evaluateExpression هست داخل Yii (کلاس CComponent) :


public function evaluateExpression($_expression_,$_data_=array())
{
if(is_string($_expression_))
{
extract($_data_);
return eval('return '.$_expression_.';');
}
else
{
$_data_[]=$this;
return call_user_func_array($_expression_, $_data_);
}
}