Пользовательское соглашение [готовое решение]

Ваши предложения по улучшению, новым модулям и т.д.

Модераторы: Xpycm, Koduc

Правила форума
ВНИМАНИЕ! Форум не является средством гарантированной поддержки клиентов и пользователей. Поэтому на быстрый ответ тут рассчитывать не нужно, как и на ответ вообще. Сотрудники отвечают по мере своих возможностей.

На форуме действует ограничение в 3 сообщения / сутки.
Если Вы хотите сказать "спасибо", то воспользуйтесь функцией "Повысить репутацию" - зелёная иконка "плюс" под ником ответившего.

Пользовательское соглашение [готовое решение]

Сообщение Cornil » 03 апр 2013, 18:18

Поскольку не нашел ни одного упоминания на форуме об обязательном согласии с пользовательским соглашением при регистрации, решил немного дополнить функционал ORE.
Сразу оговорюсь, что Yii знаю совсем недавно, возможно это все в нем есть "из коробки", но я не видел.
Итак...

Этап первый. Работаем с формой регистрации:
1. открываем \protected\views\site\register.php, здесь находится форма регистрации. Добавляем следующий код в любое удобное место, например, после телефона:
Код: Выделить всё
    <div class="row">
        <?php echo $form->labelEx($model,'terms'); ?>
        <?php echo $form->checkBox($model,'terms'); ?>
        <?php echo $form->error($model,'terms'); ?>
    </div>

Не забудем про административную часть (файл \protected\modules\users\views\backend\_form.php):
Код: Выделить всё
    <div class="rowold">
        <?php echo $form->labelEx($model,'terms'); ?>
        <?php echo $form->checkBox($model,'terms'); ?>
        <?php echo $form->error($model,'terms'); ?>
    </div>

2. открываем файлик \protected\models\User.php
в начало файла после
Код: Выделить всё
public $recoverPasswordLink; 

добавляем
Код: Выделить всё
public $terms; 

ищем в коде функцию attributeLabels() и добавляем туда строчку, которая отвечает за надпись в форме рядом с галочкой:
Код: Выделить всё
            'terms' => Yii::t('users', 'I accept the <a href="{href}" class="fancy">terms and conditions</a>', array('{href}' => Yii::app()->createUrl('/terms/main/index'))),  

Теперь у нас есть форма с галочкой, надписью и ссылкой на соглашение. Благодаря установленному классу "fancy", ссылка откроется во всплывающем окне :) Поехали дальше...
Для того, чтобы движок смог правильно отреагировать на согласие или несогласие пользователя, ищем код в секции rules:
Код: Выделить всё
            array('username, email, verifyCode, phone', 'required', 'on' => 'register'), 

добавляем туда правила обработки данных от пользователя
Код: Выделить всё
            array('terms, username, email, verifyCode, phone', 'required', 'on' => 'register'),
            array('terms', 'boolean', 'on' => 'register'),
            array('terms', 'compare', 'compareValue' => true, 'message' => Yii::t('users', 'You must agree to the terms and conditions') ), 


Открываем \protected\controllers\SiteController.php и в функцию createUser после
Код: Выделить всё
        if ($isActive)
            $model->active = 1;
        if ($activateKey)
            $model->activatekey = $activateKey; 

дописываем:
Код: Выделить всё
            $model->terms = true; 

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

Все, на данном этапе мы имеем уже готовую форму, и правила проверки введенных данных.
В принципе, можно этим и ограничиться, если есть страница с соглашением по какому-либо адресу, которую можно посмотреть, перейдя по ссылке...
Достаточно просто поменять /terms/main/index в вышеприведенном коде на нужный нам адрес.
Не забудьте потом зайти в управление переводами и перевести значения новых фраз на русский. Они появятся там автоматически, при первом выводе на страницу.

Ну а для полного счастья, можно допилить админку :)

Этап второй. Работаем со страницей пользовательского соглашения и админкой.
Для редактирования соглашения мы будем использовать клонированный и почти генетически модифицированный модуль Service "Обслуживание сайта" :)
Приводить все изменения не буду, т.к. долго. Просто подключим его (см. аттач). Модуль нужно положить в папку \protected\modules
1. открываем \protected\views\layouts\main-admin.php, ищем в двух местах такой код:
Код: Выделить всё
array('label' => tc('Site service '), 'icon' => 'icon-wrench', 'url' => $baseUrl . '/service/backend/main/admin', 'active' => isActive('service'), 'visible' => issetModule('service')),  

и добавляем после него для каждого случая строчку:
Код: Выделить всё
array('label' => tc('Site service '), 'icon' => 'icon-wrench', 'url' => $baseUrl . '/service/backend/main/admin', 'active' => isActive('service'), 'visible' => issetModule('service')),
array(
'label' => tc('Terms and conditions'), 'icon' => 'icon-wrench', 'url' => $baseUrl . '/terms/backend/main/admin', 'active' => isActive('terms'), 'visible' => issetModule('terms')), 

Теперь мы имеем свой пункт меню в админке.

2. открываем \protected\config\main-free.php, подключаем новый модуль.
В секции 'import' добавляем строчку:
Код: Выделить всё
'application.modules.terms.models.Terms',  

В секции 'modules' добавляем:
Код: Выделить всё
'terms', 


3. для правильного функционирования модуля, необходимо создать таблицу в БД.
Вот кусок запроса для MySQL:
Код: Выделить всё
CREATE TABLE IF NOT EXISTS `ore_terms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `page` text NOT NULL,
  PRIMARY KEY (`id`)
)
 ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=;

--
--
 Dumping data for table `ore_terms`
--

INSERT INTO `ore_terms` (`id`, `page`) VALUES
(1, '<p>\r\n    2013-04-02 18:43:15</p>\r\n'); 

Вместо текста соглашения - просто вчерашняя дата и время...
Не забываем поменять префикс ore_, если это требуется.
И обязательно почистите кэш \protected\runtime\cache, а то может не заработать!!

Рекомендуется к прочтению! class="fancy" и колесо мышки [решено]

Удачи!
Вложения
terms.rar
модуль Terms для Пользовательского соглашения
Обновлено 05.04.2013
(4.34 КБ) Скачиваний: 541
Последний раз редактировалось Cornil 24 май 2013, 14:42, всего редактировалось 4 раз(а).
Cornil
Гражданин
Гражданин
 
Сообщения: 77
Зарегистрирован: 18 фев 2013, 22:08
Очки репутации: 14

Re: Пользовательское соглашение [готовое решение]

Сообщение Koduc » 04 апр 2013, 08:19

Нормалёк решение, спасибо;)
Есть пара замечаний:
1) '{href}' => '/terms/main/index' - лучше сделать что-то типа такого: '{href}' => Yii::app()->createUrl('/terms/main/index')
Иначе будет криво работать при установке сайта в папке (например, на рабочей машине)
2. "Обслуживание сайта" - получилось сложновато.
МОжно сделать проще - создать в "Управление верним меню" страницу, через базу сделать её специальной (чтобы нельзя было удалить случайно).
Само "Управление вернхим меню" давно пора переименовать уже в "Страницы сайта".
ПОлучится змаметно меньше телодвижений. Но и адрес будет другой соответственно.
-- Меньше знаешь - крепче спишь --
Аватара пользователя
Koduc
Ведущий разработчик
Ведущий разработчик
 
Сообщения: 902
Зарегистрирован: 28 дек 2011, 09:11
Очки репутации: 20

Re: Пользовательское соглашение [готовое решение]

Сообщение Cornil » 04 апр 2013, 11:27

На здоровье :)

Koduc писал(а):Есть пара замечаний:
1) '{href}' => '/terms/main/index' - лучше сделать что-то типа такого: '{href}' => Yii::app()->createUrl('/terms/main/index')
Иначе будет криво работать при установке сайта в папке (например, на рабочей машине)

Ок, поправил, спасибо.

Koduc писал(а):2. "Обслуживание сайта" - получилось сложновато.
МОжно сделать проще - создать в "Управление верним меню" страницу, через базу сделать её специальной (чтобы нельзя было удалить случайно).
Само "Управление вернхим меню" давно пора переименовать уже в "Страницы сайта".
ПОлучится змаметно меньше телодвижений. Но и адрес будет другой соответственно.

Ну тогда и "Обслуживание сайта" можно в страницы затолкать :) Например - "при включении режима обслуживания, показывать {эту} страницу"
Просто этот модуль - нечто наиболее похожее на простой текстовый редактор. Зато у меня проверка isset($_GET['isFancy']) есть, чтобы во всплывающем окне не мешались элементы поиска и навигации :)
А про переименование надписи "Управление верхним меню" это очень правильно! А то настроил один раз меню и все. Я и забыл что там где-то страницы есть вообще.
Это, скорее, есть желание освоить работу с Yii и модулями. Оказалось не так сложно, как казалось в начале. Если все пойдет по плану, еще многое нужно будет переделать.
Cornil
Гражданин
Гражданин
 
Сообщения: 77
Зарегистрирован: 18 фев 2013, 22:08
Очки репутации: 14

Re: Пользовательское соглашение [готовое решение]

Сообщение Koduc » 04 апр 2013, 11:47

Не всё так страшно, как кажется. Успехов в этом начинании! ;)
-- Меньше знаешь - крепче спишь --
Аватара пользователя
Koduc
Ведущий разработчик
Ведущий разработчик
 
Сообщения: 902
Зарегистрирован: 28 дек 2011, 09:11
Очки репутации: 20

Re: Пользовательское соглашение [готовое решение]

Сообщение Saturn » 02 май 2013, 00:35

у меня не сработало. выдаёт ошибку:
Не определено свойство "User.terms"
Saturn
Незнакомец
 
Сообщения: 17
Зарегистрирован: 27 янв 2012, 12:25
Откуда: Минск, Беларусь
Очки репутации: 1

Re: Пользовательское соглашение [готовое решение]

Сообщение Xpycm » 02 май 2013, 06:37

Скорее всего в protected/models/User.php
после:
Код: Выделить всё
public $password_repeat; 

нужно добавить:
Код: Выделить всё
public $terms; 
Dropbox
Open Real Estate CMS: FAQ | FAQ 2 | FAQ 3
Изображение
Xpycm
Разработчик
Разработчик
 
Сообщения: 1592
Зарегистрирован: 30 дек 2011, 11:06
Откуда: Йошкар-Ола
Очки репутации: 50

Re: Пользовательское соглашение [готовое решение]

Сообщение Saturn » 02 май 2013, 10:38

о! я тоже так подумал, но сначала сюда написал.
в итоге заработало.
Saturn
Незнакомец
 
Сообщения: 17
Зарегистрирован: 27 янв 2012, 12:25
Откуда: Минск, Беларусь
Очки репутации: 1


Вернуться в Улучшения

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron