Страница 1 из 1

добавление типов объявления

СообщениеДобавлено: 10 фев 2012, 15:08
yoght
Здравствуйте. Столкнулся с задачей увеличить количество типов объявлений. По типу https://skitch.com/yoght/8yqgh/open-real-estate . Как я понял, в базе данных тип указывается идентификатором. Можете мне подсказать, в каких файлах нужно указать новые типы?

Re: добавление типов объявления

СообщениеДобавлено: 10 фев 2012, 15:37
andipas
На самом деле типов объявлений всего два - Аренда, Продажа. Задаются эти типы в модели protected\modules\apartments\models\Apartment.php

Код: Выделить всё
    const TYPE_RENT = 1;
    const TYPE_SALE = 2;
    const TYPE_DEFAULT = 1;


в поисковой форме, в зависимости от типа цены

Код: Выделить всё
    const PRICE_SALE = 1;
    const PRICE_PER_HOUR = 2;
    const PRICE_PER_DAY = 3;
    const PRICE_PER_WEEK = 4;
    const PRICE_PER_MONTH = 5;


и наличия объявлений с такой ценой, можно осуществлять соответствующий поиск.

В версии 1.1.2 простого решения, для добавления типов и поисков по ним нет. В новой версии будет возможность через админку добавлять, редактировать типы недвижимости и назначать их объявлениям.

Re: добавление типов объявления

СообщениеДобавлено: 10 фев 2012, 15:45
yoght
Спасибо. Попробую - отпишусь.

Re: добавление типов объявления

СообщениеДобавлено: 21 фев 2012, 10:05
Cronenberg
Вопрос к разработчику по поводу типов объявлений:
Добавляю типы объявлений в модуле Apartment

const TYPE_name = n;
...
в функции getFullInformation этого же модуля добавляю
$addWhere .= (Apartment::TYPE_NAME == $type) ? ' AND reference_values.for_name=1' : '';

...

Далее тоже самое добавляю к функции getCategories

...
Потом к функции getTypesArray
$types[self::TYPE_NAME] = tt('Name', 'apartments');

...
Потом getTypesWantArray
$types[self::TYPE_NAME] = Yii::t('common', 'name apartment');
...
Потом в функции GetPriceArray добавляю условие для нашего нового типа

if($type == self::TYPE_NAME){ //или elseif
$price = array(
self::PRICE_SALE => tt('Sale price', 'apartments'), //тип цены продажный, так подходит, а если что - можно поменять
);

И вроде бы все зашибись, то, что и хотелось, в управлении объявлениями появился список типов, но при редактировании или добавлении нового объявления с выбором нового типа объявления вываливается ошибка
Error 404

Системе не удалось найти запрашиваемое действие "undefined".


Ну что ж я еще не дописал? Подскажите, наши всемогущие разработчики!

P.S. Подписи к типам на русском конечно же тоже добавил...

Re: добавление типов объявления

СообщениеДобавлено: 21 фев 2012, 10:28
Xpycm
Всё правильно, но неполностью сделали, поэтому ошибка такая.

В функции getPriceArray в условие if($all) добавьте:

Код: Выделить всё
if($all){
   return array(
      ...
      self::PRICE_PER_TEST => tt('Price per test', 'apartments'),
   )
}


Откройте файл: protected/modules/apartments/views/backend/_form.php
в самом верху добавьте:

Код: Выделить всё
$urls = array(
   ...
   Apartment::TYPE_TEST => $this->createUrl('/apartments/backend/main/'.$this->action->id,
         array('id' => $model->isNewRecord? '': $model->id, 'type' => Apartment::TYPE_TEST)),
   )


После этого при смене типа при добавлении/редактивания объявления выдаст ошибку:

CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'reference_values.for_test' in 'where clause'.

Необходим запрос:
Код: Выделить всё
ALTER TABLE `re_dev_apartment_reference_values` ADD `for_test` TINYINT( 1 ) NOT NULL DEFAULT '1' AFTER `for_sale`;


Затем почистите кеш в папке: protected\runtime\cache\

Re: добавление типов объявления

СообщениеДобавлено: 21 фев 2012, 11:45
Cronenberg
*BRAVO* Офигенно! Спасибо за помощь!
Офигенный фреймворк, учу...

Только в форме поиска нет этих типов. Я в админке уже подобавлял объявления с новыми типами... :'(

Re: добавление типов объявления

СообщениеДобавлено: 21 фев 2012, 11:57
Xpycm
Для того чтобы в поиске отображался новый тип необходимо:

откройте файл: protected\views\site\field-type-search.php

увидите такой код:
Код: Выделить всё
$data = SearchForm::apTypes();


статический метод apTypes находится в protected\components\SearchForm.php

(вообще для удобства переходов по методам и модулям пользуйтесь NetBeans или PhpStorm, добавив файлы в проект)

и вот уже в методе apTypes файла protected\components\SearchForm.php
необходимо добавить ваш новый тип