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

добавить поле "площадь за м. кв."

СообщениеДобавлено: 12 июн 2013, 10:41
tryuk
Добрый день. У меня версия 1.4.3. Есть общая площадь при добавлении объявления, но нужно еще одно отдельное поле "площадь за квадратный метр" при аренде помещения. Подскажите пожалуйста, как добавить еще одно поле площади при добавлении объявления, и что бы оно так же выводилось при самом показе объявления. Спасибо.

Re: добавить поле "площадь за м. кв."

СообщениеДобавлено: 12 июн 2013, 14:01
Xpycm
"площадь за квадратный метр"? Это что-то новенькое. Но пусть будет так.

В базе в таблице {prefix}apartment создать поле типа mediumint, назвать его как надо (например, square_per_metr).

В /protected/modules/apartments/models/Apartment.php в функции rules() добавить это поле в строку:
Код: Выделить всё
array('square_per_metr, in_currency, owner_active, num_of_rooms, is_special_offer, is_free_from, is_free_to, active, metroStations''safe'), 


если это будет только число, то в функции rules() указать валидатор на ввод исключительно числа - http://yiiframework.ru/doc/cookbook/ru/ ... .reference. Но это будет домашним заданием.

В функцию attributeLabels() добавить название поля:
Код: Выделить всё
'square_per_metr' => 'Площадь за квадратный метр'


Далее открываем файлик /protected/modules/apartments/views/backend/__form.php после:
Код: Выделить всё
<?php if ($model->type == Apartment::TYPE_SALE || $model->type == Apartment::TYPE_BUY) { ?>
<div class="rowold">
    <?php echo $form->labelEx($model'square'); ?>
    <?php echo $form->textField($model'square', array('size' => 10)); ?>
    <?php echo $form->error($model'square'); ?>
</div>
<?php ?>


вставляем:
Код: Выделить всё
<?php if($model->type == Apartment::TYPE_RENT) : ?>
<div class="rowold">
    <?php echo $form->labelEx($model'square_per_metr'); ?>
    <?php echo $form->textField($model'square_per_metr', array('size' => 10)); ?>
    <?php echo $form->error($model'square_per_metr'); ?>
</div>
<?php endif; ?>


Ну и отображение поля надо добавить в /protected/modules/apartments/views/_view.php.
До:
Код: Выделить всё
if($data->getStrByLang('description_near')){
    echo 
'<p><strong>'.tt('Near').':</strong> '.CHtml::encode($data->getStrByLang('description_near')).'</p>';


Вставить:
Код: Выделить всё
if($data->type == Apartment::TYPE_RENT && $data->square_per_metr) {
    echo 
'<p><strong>Площадь за квадратный метр:</strong> '.CHtml::encode($data->square_per_metr).'</p>';


+ вывод вставить в файл protected/modules/apartments/views/view_print.php (версия для печати) только в этом файле объект называется не $data, а $model. Сложностей возникнуть не должно.
Добавление вывода в файл protected/modules/apartments/views/view_print.php также оставляю на "домашнее задание"

Re: добавить поле "площадь за м. кв."

СообщениеДобавлено: 12 июн 2013, 14:32
tryuk
Ой, прошу прощения. Площадь жилая имелась ввиду. Понял как сделать, спасибо большое!!!
И еще один вопрос пожалуйста, добавить цену за квадратный метр (;
То есть что бы было при аренде цена за квадратный метр и общая цена выводились.
Еще раз извините за ошибку.

Re: добавить поле "площадь за м. кв."

СообщениеДобавлено: 12 июн 2013, 14:40
Xpycm
Да ничего страшного, наверное торопились. Но читается с юмором, да :-)

Цену за квадратный метр Вы можете сделать по такой же аналогии

Re: добавить поле "площадь за м. кв."

СообщениеДобавлено: 12 июн 2013, 14:45
Xpycm
Вот Вам несколько ссылок в помощь добавления полей на форму, вывода, валидации
http://www.yiiframework.com/doc/guide/1.1/ru/form.view
http://sectronov.blogspot.ru/2011/02/yii.html
http://www.dbhelp.ru/yii-form-validation/page/
http://yiiframework.ru/doc/cookbook/ru/ ... .reference

На самом деле Yii фреймворк не такой уж и сложный. Но "точка входа в него" требует знаний PHP не на уровне "прочитал одну книжку по PHP".
Зато, если проникнитесь, сможете реализовывать функционал в разы быстрее и качественнее нежели на "чистом PHP".

Re: добавить поле "площадь за м. кв."

СообщениеДобавлено: 12 июн 2013, 14:51
tryuk
Еще раз спасибо Вам большое за ответ и полезные ссылки!!!

Re: добавить поле "площадь за м. кв."

СообщениеДобавлено: 12 июн 2013, 16:02
tryuk
Что-то у меня не получается.
В базе в таблице ore_apartment создал поле Изображение

В /protected/modules/apartments/models/Apartment.php в функцию attributeLabels() добавил название поля:
Код: Выделить всё
public function attributeLabels() {
        return array(
            'id' => tt('ID', 'apartments'),
                        'type' => tt('Type', 'apartments'),
            'price' => tt('Price', 'apartments'),
            'num_of_rooms' => tt('Number of rooms', 'apartments'),
            'floor' => tt('Floor', 'apartments'),
            'floor_total' => tt('Total number of floors', 'apartments'),
            'square' => tt('Square', 'apartments'),
            'square_per_metr' => tt('Жилая площадь'),
            'window_to' => tt('Window to', 'apartments'), 


В /protected/modules/apartments/models/Apartment.php в функции rules() добавил так же:
Код: Выделить всё
public function rules() {
        return array(
            //array('price', 'required'),
            //array('price ', 'numerical', 'min' => 1),
            array('price', 'priceValidator'),
            array('title', 'i18nRequired'),
            array('price, price_to, floor, floor_total, square, window_to, type, price_type, obj_type_id, city_id', 'numerical', 'integerOnly' => true),
            array('price_to', 'priceToValidator'),
            array('berths', 'length', 'max' => 255),
            array('title', 'i18nLength', 'max' => 255),
            array('lat, lng', 'length', 'max' => 25),
            array('id', 'safe', 'on' => 'search'),
            array('floor', 'myFloorValidator'),
            array('is_price_poa', 'boolean'),
            array('square_per_metr, in_currency, owner_active, num_of_rooms, is_special_offer, is_free_from, is_free_to, active, metroStations', 'safe'),
            array($this->getI18nFieldSafe(), 'safe'),
            array('city_id, owner_active, active, type, ownerEmail', 'safe', 'on' => 'search'),
        );
    } 


/protected/modules/apartments/views/backend/__form.php после
Код: Выделить всё
<div class="rowold">
        <?php echo $form->labelEx($model, 'square'); ?>
        <?php echo $form->textField($model, 'square', array('size' => 10)); ?>
        <?php echo $form->error($model, 'square'); ?>
    </div>

добавил
Код: Выделить всё
<div class="rowold">
        <?php echo $form->labelEx($model, 'square_per_metr'); ?>
        <?php echo $form->textField($model, 'square_per_metr', array('size' => 10)); ?>
        <?php echo $form->error($model, 'square_per_metr'); ?>
    </div>

Полный текст файла __form.php http://hash.su/7715

Для отображения в /protected/modules/apartments/views/_view.php перед текстом:
Код: Выделить всё
if($data->getStrByLang('description_near')){
                echo '<p><strong>'.tt('Near').':</strong> '.CHtml::encode($data->getStrByLang('description_near')).'</p>';
            } 

вставил:
Код: Выделить всё
if($data->type == Apartment::TYPE_RENT && $data->square_per_metr) {
                echo '<p><strong>Жилая площадь:</strong> '.CHtml::encode($data->square_per_metr).'</p>';
            }  

И вывод вставил в версии для печати (скорее всего не верно) в protected/modules/apartments/views/view_print.php
Код: Выделить всё
if ($model->square) {
                                    $echo[] = Yii::t('module_apartments', 'total square: {n}', $model->square).' '.CHtml::decode(param('site_square', 'м<sup>2</sup>'));
                                }
                                if ($model->square_per_metr) {
                                    $echo[] = Yii::t('module_apartments', 'total square_per_metr: {n}', $model->square_per_metr).' '.CHtml::decode(param('site_square_per_metr', 'м<sup>2</sup>'));
                                } 


Отображается "Жилая площадь" в админке при добавлении об]явления, но почему-то не отображается после сохранения на самом сайте.
Подскажите пожалуйста, где допустил ошибку (;

Re: добавить поле "площадь за м. кв."

СообщениеДобавлено: 12 июн 2013, 16:10
Xpycm
Вы писали в первом посте: "при аренде". Соотвественно, я добавил условия: model->type == Apartment::TYPE_RENT

Если убираете условие при добавлении объявления:
Код: Выделить всё
<?php if($model->type == Apartment::TYPE_RENT) : ?>


то убирайте и при просмотре:
Код: Выделить всё
if($data->type == Apartment::TYPE_RENT && $data->square_per_metr) { 

Re: добавить поле "площадь за м. кв."

СообщениеДобавлено: 12 июн 2013, 16:44
tryuk
Все, понял. Спасибо большое еще раз за помощь и разъеснения!

Re: добавить поле "площадь за м. кв."

СообщениеДобавлено: 14 июн 2013, 11:49
tryuk
Доброе утро. Прошу прощения за нубский вопрос, но у меня не получается почему-то сделать вывод "Жилая площадь" в "продаже" недвижимости. Подскажите, пожалуйста, подробней, где и что в каком файле менять, что б знал на будущее. Спасибо большое заранее.
И еще дополнительный вопрос: как сделать например в "Обратная связь" поле для заполнения "Телефон" обязательным.