ورود

View Full Version : جستجو در سایت



code.zan
چهارشنبه 21 خرداد 1393, 11:30 صبح
سلام
می خوام یک فیلد جستجو در سایت در صفحه اول سایتم داشته باشم .
از اکستنشن esearch استفاده کردم ولی زیاد جالب نبود راحت نتونستم ادیت اش کنم .
ظاهرا فقط با یک مدل کار میکنه و نتیجه هم فقط به صورت id مدل مربوطه ( که لینک شده به url ) بر می گردونه .
به نظر تون چکار کنم خودم یک سرچ بنویسم یا راه حل راحت تر دیگه ای هم هست ؟

MMSHFE
چهارشنبه 21 خرداد 1393, 13:26 عصر
راستش من خودم شخصاً زیاد از افزونه ها استفاده نمیکنم و نوشتن جستجو هم کار خاصی نداره. کافیه از CDbCriteria استفاده کنید.

code.zan
چهارشنبه 21 خرداد 1393, 18:02 عصر
میخوام کادر سرچ ام autoComplete هم داشته باشه ، بعلاوه تو کادر جستجو عکس هم نشون داده بشه .
برای اینکار از ویجت autoComplete خود yii استفاده کنم یا نه ؟

barname_newis
چهارشنبه 21 خرداد 1393, 19:52 عصر
جناب شهرکی ممنون میشم پاسخ کامل بدید منم همین مشکل رو دارم

tinybyte
سه شنبه 27 خرداد 1393, 14:14 عصر
با سلام
دوستان خودشون هم سعي كردن تا اين مشكل را حل كنند يا فقط دنبال جواب هستن؟
اگه با كد صحبت كنيم بهتره.
راستي CJuiAutoComplete را ميشه كانفيگ كرد تا هرجور داده اي را برگردونه و كلي هم event داره كه
ميشه روي اون با داده اي كه از سرور مي گيري كار كرد.

engmmrj
سه شنبه 27 خرداد 1393, 14:27 عصر
من به شکل زیر search مینویسم

public function actionSearch($search)
{
$model = new Post;
$criteria = new CDbCriteria;
$criteria->addSearchCondition('title', $search, true, 'OR', 'LIKE');
$criteria->addSearchCondition('post', $search, true, 'OR', 'LIKE');
Post::model()->findAll($criteria);
}

tinybyte
سه شنبه 27 خرداد 1393, 17:44 عصر
یک نکته

$model = new Post; این خط کد که هیچ کاری نمی کنه؟
دوم هم شما این تابعی که نوشتین خروجی هم نداره،
راستی اگر نتایج را در گرید ویو بخواهین نشان بدین بهتره از CActiveDataProvider استفاده کنین

engmmrj
سه شنبه 27 خرداد 1393, 18:06 عصر
یک نکته

$model = new Post; این خط کد که هیچ کاری نمی کنه؟
دوم هم شما این تابعی که نوشتین خروجی هم نداره،
راستی اگر نتایج را در گرید ویو بخواهین نشان بدین بهتره از CActiveDataProvider استفاده کنین
دوست عزیز این یک نمونه از سورس کد تو پروژه ام بود که قسمت های اضافی رو پاک کرده بودم!

engmmrj
سه شنبه 27 خرداد 1393, 18:07 عصر
راستی اگر نتایج را در گرید ویو بخواهین نشان بدین بهتره از CActiveDataProvider استفاده کنین
GridView خودش search و یک سری امکانات اضافی داره !

tinybyte
سه شنبه 27 خرداد 1393, 18:32 عصر
GridView خودش search و یک سری امکانات اضافی داره !
برای گرید ویو معمولا متد search مدل را صدا میزن که اگر دقت کرده باشین یک CActiveDataProvider را بر می گردونه


public function search($relationWithDeleted=false) {
$criteria = new CDbCriteria;


$criteria->compare('idPost', $this->idPost);
$criteria->compare('idUser', $this->idUser);

// ...


return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}


(یکی به من بگه کد ها رو چجوری میشه مرتب توی این سایت گذاشت !؟)

engmmrj
سه شنبه 27 خرداد 1393, 18:41 عصر
برای گرید ویو معمولا متد search مدل را صدا میزن که اگر دقت کرده باشین یک CActiveDataProvider را بر می گردونه


public function search($relationWithDeleted=false) {
$criteria = new CDbCriteria;


$criteria->compare('idPost', $this->idPost);
$criteria->compare('idUser', $this->idUser);

// ...


return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}


(یکی به من بگه کد ها رو چجوری میشه مرتب توی این سایت گذاشت !؟)
خوب این الان چه ربطی به کدی که من گذاشتم داره ؟
این اصلا کد من هست :

public function actionIndex($id = NULL)
{
$model = new Post;
$criteria = new CDbCriteria;
$criteria->with = array('CountComment','author0');
if($id != NULL) {
$criteria->with = array('CountComment', 'author0','ariaCats');
$criteria->together = true;
$criteria->condition = '`cat_id`=:id';
$criteria->params = array(':id' => $id);
}

$criteria->order = 't.id DESC';
$dependecy = new CDbCacheDependency('SELECT MAX(update_time) FROM {{post}}');
$dataProvider = new CActiveDataProvider(Post::model()->cache(3600000000, $dependecy), array('criteria'=>$criteria,'pagination' => array('pageSize' => 4)));


$this->render('index', array('model' => $model, 'dataProvider' => $dataProvider));
}

tinybyte
سه شنبه 27 خرداد 1393, 22:55 عصر
بابا کد خفن :تشویق: !!
:چشمک: