Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Yii2 advanced Обратить к полю dropDownList, Обратить к полю dropDownList
horosami  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 44125
На форуме: 20 дней
Карма:




У меня в выпадающем списке есть: коты и собаки.
Поля по которым надо искать: name_cat, name_dog соответственно.
Как написать if else, чтоб выполнялся поиск по соответствующему полю для каждого пункта.

я хз как обратить к полю списка))) типа такого $f->field($search, 'place_search')->dropDownList == 'Коты' только не так))....
как написать условие такое?

 <?= $f->field($search, 'place_search')->dropDownList(['В таблице Коты и кошки', 'В таблице Собаки'])->label('Где искать?') ?>
<?=
$f->field($search, 'field_search')->checkboxList(['name_cat' => 'По названию', 'description_cat' => 'По описанию'])->label('Искать по:') ?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




так ты же после submit будешь с данными работать, поэтому нужно работать с request

$post = yii::$app->request->post();


и условие строить по

if($post['place_search'] == '....')


или

if($post['field_search'] == '....')


ну или с get , смотря с чем работаешь


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
horosami  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 44125
На форуме: 20 дней
Карма:




Цитата
так ты же после submit будешь с данными работать, поэтому нужно работать с request

$post = yii::$app->request->post();


и условие строить по

if($post['place_search'] == '....')


или

if($post['field_search'] == '....')


ну или с get , смотря с чем работаешь



я все равно делаю все не так)
это у меня в search.php и данные выводятся через gridview

            <?php $f = ActiveForm::begin(['id' => 'form-search', 'method' => 'get', 'action' => ['site/search'], 'options' => ['data-pjax' => 1]]); ?>
<?=
$f->field($search, 'content_search')->textInput(['autofocus' => true])->label('Что будем искать?') ?>


<?=
$post = yii::$app->request->post(); ?>

<?php
if($post['place_search'] == 'В таблице Коты и кошки') {
$f->field($search, 'field_search')->checkboxList(['name_cat' => 'По названию', 'description_cat' => 'По описанию'])->label('Искать по:')
} else if($post['place_search'] == 'В таблице Собаки') {
$f->field($search, 'field_search')->checkboxList(['name_dog' => 'По названию', 'decription_dog' => 'По описанию'])->label('Искать по:')
}
?>



а это у меня в SiteCintroller.php
по умолчанию о котах инфа выводится

    public function actionSearch()
{
$search = new SearchForm();

$search->load(Yii::$app->request->queryParams);


$dataProvider = $search->search();

return $this->render('search',
[

'search' => $search,
'dataProvider' => $dataProvider,



'columns' => ($search->place_search == SearchForm::SEARCH_CATS) ? ['name_cat', 'description_cat', 'photo_cat:image'] : [
[

'label' => 'Название',
'format' => 'raw',
'value' => function ($model) {
$cats = Cats::findOne($model-id_cat);
return \yii\bootstrap\Html::a($cats->name_cat, ['/cats','numbercats' => $model->id_cat]);

}
]
,
'name_cat', 'description_cat', 'photo_cat:image']
]);


}


:unsure:
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




1. у тебя форма с GET работает
ActiveForm::begin(['id' => 'form-search', 'method' => 'get'

2. сам dropDownList какой-то кривой - там же пары ключ=>значение должны быть
<?= $f->field($search, 'place_search')
->
dropDownList([
'cats'=>'В таблице Коты и кошки',
'dogs' =>'В таблице Собаки'])
->
label('Где искать?');
?>


да и нафиг он, когда есть более навороченный select2 https://github.com/kartik-v/yii2-widget-select2
3. columns - это массив столбцов, зачем у тебя там тернарный оператор вообще

всё что ты найдёшь будет и так в $dataProvider

'value' => function ($model) {


тут ты достаёшь все из переданной модели, ведь сам $dataProvider - содержит все найденные по твоему критерию поиска

вьюхе вообще по барабану что и где ищется - он берёт и выводит модели в нужном списке.

что у тебя в $dataProvider ?

распечатай

 public function actionSearch()
{
$search = new SearchForm();

$search->load(Yii::$app->request->queryParams);


$dataProvider = $search->search();

echo '<pre>' . print_r($dataProvider->getModels(), 1) . '</pre>';


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
horosami  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 44125
На форуме: 20 дней
Карма:




Цитата
public function actionSearch()
    {
        $search = new SearchForm();

        $search->load(Yii::$app->request->queryParams);


        $dataProvider = $search->search();
 
        echo '<pre>' . print_r($dataProvider->getModels(), 1) . '</pre>';





я переписала dropDownList на тот, который у вас.
если в контроллере заменить на тот код который выше, то выведет просто массив двух кошек. как и выводилось у меня по умолчанию.

чтобы было легче понять что у меня творится, то вот:

у меня есть 2 модели: CatsSearch.php, DogsSearch.php:
<?php
namespace frontend\models;

use Yii;

class Cats extends \yii\db\ActiveRecord
{

public static function tableName()
{
return 'cats';
}

public function rules()
{
return [
[[
'id_cat', 'name', 'description'], 'required'],
[[
'id_cat', 'name', 'photo_cat'], 'string', 'max' => 255],
[[
'description'], 'string', 'max' => 1000],
];

}

public function attributeLabels()
{
return [
'id_cat' => 'Ид кота',
'name' => 'Название кота',
'description' => 'Описание',
// 'photo_cat' => 'Картинка1',
// 'photo_cat2' => 'Картинка2',
// 'photo_cat3' => 'Картинка3',

];
}
}

с собаками модель считай такая же...

Кроме того, есть модель SearchForm.php:
<?php
namespace frontend\models;

use yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use yii\db\ActiveRecord;



class SearchForm extends Model
{
const SEARCH_CATS = 0;
const SEARCH_DOGS = 1;

public $content_search;
public $place_search;
public $field_search;


public function rules()
{
return [
[[
'content_search', 'place_search', 'field_search'], 'required', 'message' => 'Не заполнено поле'],
[
'content_search', 'string', 'min' => 3],
];

}

public function search()
{
$dataProvider = new ActiveDataProvider();
$dataProvider->pagination = [
'pageSize' => 2,
];

$dataProvider->query = Cats::find();
if ($this->place_search == self::SEARCH_CATS) {
$query = Cats::find();
$dataProvider->query = $query;
if(!empty($this->field_search)){
foreach ($this->field_search as $fieldSearch) {
$query->orFilterWhere(['like', $fieldSearch, $this->content_search]);
}
}

}
else if($this->place_search == self::SEARCH_DOGS) {
$query = Dogs::find();

$dataProvider->query = $query;
if(!empty($this->field_search)){
foreach ($this->field_search as $fieldSearch) {
$query->orFilterWhere(['like', $fieldSearch, $this->content_search]);
}
}

}

return $dataProvider;

}

}




к главном SiteController.php:
    // поиск на сайте
public function actionSearch()
{
$search = new SearchForm();

$search->load(Yii::$app->request->queryParams);


$dataProvider = $search->search();

return $this->render('search',
[

'search' => $search,
// сам $dataProvider - содержит все найденные по твоему критерию поиска
'dataProvider' => $dataProvider,



'columns' => ($search->place_search == SearchForm::SEARCH_CATS) ? ['name', 'description', 'photo_cat:image'] : [
[

'label' => 'Название',
'format' => 'raw',
'value' => function ($model) {
$cats = Cats::findOne($model-id_cat);
return \yii\bootstrap\Html::a($cats->name, ['/cats','numbercats' => $model->id_cat]);

}
]
,
'name', 'description', 'photo_cat:image']
]);


}



ну и сам search.php где вообще все отображается:

<?php

/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $model \frontend\models\SearchForm */


use yii\grid\GridView;
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;



$this->title = 'Поиск данных';
$this->params['breadcrumbs'][] = $this->title;


?>

<h1 id="search-title"><?= Html::encode($this->title) ?></h1>


<
div class="convert-text">

<?php \yii\widgets\Pjax::begin(); ?>


<div class="row">
<
div class="col-lg-2">
<!--
форма с GET работает -->
<?php $f = ActiveForm::begin(['id' => 'form-search', 'method' => 'get', 'action' => ['site/search'], 'options' => ['data-pjax' => 1]]); ?>
<?=
$f->field($search, 'content_search')->textInput(['autofocus' => true])->label('Что будем искать?') ?>


<?=
$f->field($search, 'place_search')
->
dropDownList([
'cats'=>'Коты и кошки',
'dogs' =>'Собаки'])
->
label('Где искать?');
?>


<br>
<?= $f->field($search, 'field_search')->checkboxList(['name' => 'По названию', 'description' => 'По описанию'])->label('Искать по:') ?>


<div class="form-group">
<?= Html::submitButton('Начать поиск', ['class' => 'btn btn-comment btn-search', 'name' => 'search-button']) ?>
<br><br>
<
br><br>
</
div>
<?php ActiveForm::end(); ?>
</div>


<
div class="col-lg-10">
<
div class="table-responsive">
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => $columns,

]);
?>
</div>
</
div>
<?php \yii\widgets\Pjax::end(); ?>
</div>




</
div>



прошу прощения за г..код) я слабо знакома с yii, уже голову сломала с этим поиском.


решила в базе данных в таблице cats, dogs сделать одинаковые поля: name, description. не помогло...
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




у тебя $dataProvider = $search->search();

и модель $search - должна решать где искать.
у модели свойство $search->place_search будет меняться в зависимости от селекта в форме


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
horosami  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 44125
На форуме: 20 дней
Карма:




Цитата
у тебя $dataProvider = $search->search();

и модель $search - должна решать где искать.
у модели свойство $search->place_search будет меняться в зависимости от селекта в форме



так да.
дело в том что когда я ищу о котах, то все ок. находит.
а если я ввожу о собаках, например поиск по названию, то всегда!!!!!! пишет - ничего не найдено.
оно будто не может связаться с собаками этами. я хз что делать. подскажите пожалуйста
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




так у тебя запрос в модели search не меняется.

ты сравниваешь с константами - if ($this->place_search == self::SEARCH_CATS) {

    const SEARCH_CATS = 0;
const SEARCH_DOGS = 1;


а $this->place_search у тебя принимает вид

  <?= $f->field($search, 'place_search')
->
dropDownList([
'cats'=>'Коты и кошки',
'dogs' =>'Собаки'])
->
label('Где искать?');
?>



в контроллере после

$dataProvider = $search->search();


выведи значение списка

echo $this->place_search;


при котах и собаках - какие у place_search значения ?


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
horosami  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 44125
На форуме: 20 дней
Карма:




Цитата
echo $this->place_search;


после этого выводит ошибку.
Getting unknown property: frontend\controllers\SiteController::place_search

а если ее объявить в сайтКонтроллере как паблик плэйсСерч, то вообще алах акбар происходит
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




так. как ты моделе хватаешь что ты отправила с селекта?
покажи кусок кода


вот же свойство

class SearchForm extends Model
{
const SEARCH_CATS = 0;
const SEARCH_DOGS = 1;

public $content_search;
public $place_search;


public $place_search;


ты куда мой кусок кода вставляла то?))


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
horosami  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 6
Пользователь №: 44125
На форуме: 20 дней
Карма:




Цитата
ты куда мой кусок кода вставляла то?))


ахха)) короче я уже решила проблему.
нам препод давал этот поиск. но он не совсем верный.
потому что провайдер как бы должен с одной таблицей работать а не с двумя и из-за этого такая возня выходит.

я по другому сделала, но похожим способом. все работает.


проблема была в том что:
выгружаем по умолчанию таблицу с котами.
и потом. мы ищем именно уже по тому, что выгрузило.
то есть до таблицы с собаками даже не дошло)
препод сказал что там с аяксом надо накрутить что-то ну я нашла более еврейский способ).
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




Цитата
потому что провайдер как бы должен с одной таблицей работать

сосем нет)) провайдер это набор моделей + его подноготная.

провайдеру пофиг с таблицей работать или с массивом или ещё с чем.


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса