1

Тема: Captcha

Немогу никак подключить капчу ! .. не виводится и все !
Помогите !
                                         {if $cap_image}
                            <label for="captcha">{$cap_image}</label>
                                <input type="text" size="30" name="captcha" class="text" />
                                   <br />
                                   <span class="help_text">Укажите код протекции</span>
                                   {/if}
ВОт как вызываю !

Thumbs up Thumbs down

2 Отредактировано cutter (07-03-2012 03:24:44)

Re: Captcha

0_о  она вообще-то по умолчанию есть ... и просто в настройкай указывается её поведение это раз
во вторых укажите дополнительную информацию-
какой движок (версия)?
в какой шаблон вписываете этот текст?
что и где желаете получить?

Thumbs up Thumbs down

3

Re: Captcha

Версия: 2.5.5

main.tpl - default/
Я хочу создать модуль подписки !
И еще один глупый вопрос - где обрабатываются значения форм ??
Например в акшен указан -- login/login!!!

Thumbs up Thumbs down

4 Отредактировано cutter (07-03-2012 14:15:25)

Re: Captcha

Например в акшен указан -- login/login!!!

надеюсь это только пример!
в данном случае как я понимаю лучше указать такой

Host.domain/reqest1/request2

будет показывать страницу с url "request2" в категории с url "reqest1" находящийся в корневой категории (если конечно обе существуют)
либо модулю с именем категории "reqest1" с файлом внутри категории с именем "reqest1" функции внутри "request2" класса "reqest1" этого файла.
если тупо объяснил извиняйте ) вот пример
/applications/modules/request1/request1.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Image CMS
 *
 * Module Request1
 */
//class Request1 extends Controller {      // этот код для старых версий движка!
class Request1 extends MY_Controller {     // этот код для новых версий движка!
     public function __construct()
          { parent::__construct();}
     public function request2()
          {
// для наглядности
          foreach ($_POST as $k => $v)
               {
               echo '<BR />'.$k.'='.$v;
               }
//
          $this->load->library('Form_validation'); // загрузка компонента проверки форм
          $this->form_validation->set_rules('email','Почта','trim|required|xss_clean|valid_email');
          if($this->form_validation->run($this)== FALSE)
              {echo validation_errors();}else
                  {
// тут выполняем желаемые операции
                  }                                
          }
...
}
/* End of file Request1.php */

уж как echo заменить на вывод в шаблоны думаю учить не надо, а если работать будет на JS так и вообще не нужно заменять.

Thumbs up +1 Thumbs down

5

Re: Captcha

Вот что пишу в main.tpl:

<div id="login">
                {if $is_newsletter_in}

                {else:}
                    <h1>{lang('lang_newsletter_page')}</h1>
                    <form action="/newsletter/letter" method="post" class="form">
                        <div class="newsletter_img">
                            <input type="text" id="newsletter_email" size="40" name="newsletter_email" value="{lang('lang_newsletter_email')}" onfocus="if(this.value=='{lang('lang_newsletter_email')}') this.value='';" onblur="if(this.value=='') this.value='{lang('lang_newsletter_email')}';">
                        </div>

                        <div class="newsletter_submit">
                            <input type="submit" id="submit" class="newsletter_submit" value="{lang('lang_newsletter_submit')}">
                        </div>

                        {if $cap_image}
    <div class="comment_form_info">
    <div class="textbox captcha">
        <input type="text" name="captcha" id="captcha" value="Код протекции" onfocus="if(this.value=='Код протекции') this.value='';" onblur="if(this.value=='') this.value='Код протекции';"/>
       </div>
    {$cap_image}
    </div>
    {/if}
                    {form_csrf()}
                    </form>
                 {/if}
                    <div style="clear:left;"></div>
                </div>

тогда в apllication/newsletter/letter.php :

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Image CMS
 *
 * Module Request1
 */

class newsletter extends MY_Controller {     // этот код для новых версий движка!
     public function __construct()
          { parent::__construct();}
          
          
     public function letter()
          {
// для наглядности
          foreach ($_POST as $k => $v)
               {
               echo '<BR />'.$k.'='.$v;
               }
/*
          $this->load->library('Form_validation'); // загрузка компонента проверки форм
          $this->form_validation->set_rules('email','Почта','trim|required|xss_clean|valid_email');
          if($this->form_validation->run($this)== FALSE)
              {echo validation_errors();}else
                  {
// тут выполняем желаемые операции
                  }  */                              
          }
...
}
/* End of file Request1.php */

По  идеи должно б виводить Емейл которий передался !
А видает : страница не найдена ! )
И еще т майн.тпл есть такая :

if $cap_image}
    <div class="comment_form_info">
    <div class="textbox captcha">
        <input type="text" name="captcha" id="captcha" value="Код протекции" onfocus="if(this.value=='Код протекции') this.value='';" onblur="if(this.value=='') this.value='Код протекции';"/>
       </div>
    {$cap_image}
    </div>
    {/if}

Но почемуто капчу не выводит !!!
Либо я тупой .. и не понимаю как устроен обмен ! ) Либо хз.....
Помогите !!

Thumbs up Thumbs down

6 Отредактировано cutter (07-03-2012 15:06:06)

Re: Captcha

забыл предупредить "newsletter" в имени класса ОБЯЗАТЕЛЬНО надо писать с заглавной "Newsletter"
сейчас код пересмотрю весть, может ещё что найду...
м... также не забывай, в админке модуль должен быть установлен и ему должен быть разрешен доступ по URL !

ты не обратил внимания что вместо
тогда в apllication/newsletter/letter.php :
нужно
тогда в apllication/newsletter/newsletter.php :

Thumbs up +1 Thumbs down

7 Отредактировано cutter (07-03-2012 15:08:30)

Re: Captcha

надеюсь ты заметил

...

в конце примера

с капчей как и чего не знаю, но сейчас гляну

Thumbs up Thumbs down

8

Re: Captcha

cutter пишет:

надеюсь ты заметил

...

в конце примера

с капчей как и чего не знаю, но сейчас гляну

Пока большое человеческое спасибо ! - иду исправлять ! )

Thumbs up Thumbs down

9

Re: Captcha

блин закопался в эту капчу ... короче у меня пока не получилось.. босаю есть другие дела ... в общем у меня на аля кросплатформенную атаку матюгалось ( так и не вылечил

Thumbs up Thumbs down

10

Re: Captcha

Справился - выводит !
Теперь пробую зделать проверку емайла ....
Долго не раздумывая пошол в авторизацию

function email_check($email)
    {
        ($hook = get_hook('auth_email_check')) ? eval($hook) : NULL;

        $result = $this->dx_auth->is_email_available($email);
        if ( ! $result)
        {
            $this->form_validation->set_message('email_check', lang('lang_email_exists'));
        }

        return $result;
    }

Объясните еще пожалуйста что такое ($hook = get_hook('auth_email_check')) ? eval($hook) : NULL;

и надо ли менять dx_auth - на dx_newsletter

Thumbs up Thumbs down

11 Отредактировано cutter (07-03-2012 16:40:31)

Re: Captcha

1 не обращай внимания на

($hook = get_hook('auth_email_check')) ? eval($hook) : NULL;

эта строка ищет хуки с именем "auth_email_check" и выполняет их (это нужно для расширения фкнкционала)
2 dx_auth это часть кода основной системы! его не нужно трогать
3 проверку почты я писал выше ! причем полностью
код в модуле

$this->load->library('Form_validation'); // загрузка компонента проверки форм
          $this->form_validation->set_rules('email','Почта','trim|required|xss_clean|valid_email');
// другие необходимые проверки
          if($this->form_validation->run($this)== FALSE)
              {echo validation_errors();}else
                  {
// тут выполняем желаемые операции
                  }

текст в шаблоне

....
<input type="text" name="email" value="Почта" onfocus="if(this.value=='Почта') this.value='';" onblur="if(this.value=='') this.value='Почта';"/>
....

Thumbs up +1 Thumbs down

12

Re: Captcha

Понятно изложил ... за это тоже спасибо ..
Остается такой вот вопрос ... - проверка сделана - если с ошибкой - то в тоже окно с формой  мы должны вывести что емейл не корректен  !(точнее то что возвращает validation_errors())  ....

<h1>{lang('lang_newsletter_page')}</h1>
                {if $is_newsletter_in}
                                        // вывод текста после добавления в БД
                {else:}
                    {if $is_newsletter_error}
                    // здесь ошибка коректности !!
                    {/if}
                    <form action="/newsletter/letter" method="post" class="form">

Буду очень благодарет !

Я так понимаю что если есть ошыбка то $is_newsletter_error -- должно быть присвоено либо ошыбку либо 1 (а по умолчанию 0)

Thumbs up Thumbs down

13 Отредактировано cutter (08-03-2012 16:33:50)

Re: Captcha

да не вопрос!
так делаю я.

<!-- над формой  -->
{if validation_errors()}
    <div class="errors">
    <p class="error_header">Были обнаружены следующие ошибки:</p>
           {validation_errors('<div style="color:red">','</div>')}
    </div>
{/if}
<!-- //над формой  -->

<!-- один из элементов формы  -->
Почта<input type="text" {if form_error('email')}style="border:1px solid $eedddd;"{/if}name="email" value={$inparam.email}" > 
<!-- //один из элементов формы  -->

для Вас это что-то вроде

<h1>{lang('lang_newsletter_page')}</h1>
                {if $is_newsletter_in}
                                        // вывод текста после добавления в БД
                {else:}
                    {if validation_errors()}
                          Были обнаружены следующие ошибки:<br />
                          {validation_errors('<div style="color:red">','</div>')}
                    {/if}
                    <form action="/newsletter/letter" method="post" class="form">
                    ....................
                    Почта<input type="text"{if form_error('email')} style="border:1px solid $eedddd;"{/if} name="email" value={$inparam.email}">

Thumbs up Thumbs down

14

Re: Captcha

т.к

$this->load->library('Form_validation'); // загрузка компонента проверки форм

происходит в php скрипте, проблем с командами

validation_errors()

в шаблоне возникать не будет.
так, что если Ваш модуль отвечает в основном за проверку форм и за запись в бд, думаю следует команду
"$this->load->library('Form_validation');" вынести в "головную" функцию
пример

 public function __construct()
          {
          parent::__construct();
          $this->load->library('Form_validation');
          }

и забыть про неё ннавсегда (в этом модуле) big_smile 
не знаю правильно ли это, но я так делаю, без проблем работет.

Thumbs up +1 Thumbs down

15

Re: Captcha

Я так и зделал !!!

Thumbs up Thumbs down

16

Re: Captcha

http://forum.imagecms.net/viewtopic.php?pid=4401#p4401 За решение в этом посте большое спасибо) гибко и круто!

Простое правило программиста будь проще

17 Отредактировано cutter (09-03-2012 06:22:11)

Re: Captcha

я ещё обычно все проверки отбиваю жирным

$this->form_validation->set_rules('email','<strong>Почта</strong>','trim|required|xss_clean|valid_email');

намного лучше смотрится)

Thumbs up Thumbs down

18

Re: Captcha

cutter пишет:

да не вопрос!
так делаю я.

<!-- над формой  -->
{if validation_errors()}
    <div class="errors">
    <p class="error_header">Были обнаружены следующие ошибки:</p>
           {validation_errors('<div style="color:red">','</div>')}
    </div>
{/if}
<!-- //над формой  -->

<!-- один из элементов формы  -->
Почта<input type="text" {if form_error('email')}style="border:1px solid $eedddd;"{/if}name="email" value={$inparam.email}" > 
<!-- //один из элементов формы  -->

для Вас это что-то вроде

<h1>{lang('lang_newsletter_page')}</h1>
                {if $is_newsletter_in}
                                        // вывод текста после добавления в БД
                {else:}
                    {if validation_errors()}
                          Были обнаружены следующие ошибки:<br />
                          {validation_errors('<div style="color:red">','</div>')}
                    {/if}
                    <form action="/newsletter/letter" method="post" class="form">
                    ....................
                    Почта<input type="text"{if form_error('email')} style="border:1px solid $eedddd;"{/if} name="email" value={$inparam.email}">

у меня не получилось ! )  - все что идет в тпл после валидейшн не отображается !  )

Thumbs up Thumbs down

19

Re: Captcha

ВОпрос - как в main.tpl - можно зделать includ ('application/modules/newsletter/newsletter.php')

Thumbs up Thumbs down

20

Re: Captcha

Зачем вам в представление(шаблон) инклюдить код?

Профессиональное создание сайтов любой сложности, аудит, продвижение, а также поддержка вашего интернет ресурса - web2life.ru

TIMEWEB > Всегда больше, чем просто хостинг для ImageCMS!

21

Re: Captcha

supleader пишет:

Зачем вам в представление(шаблон) инклюдить код?

та надумал - старым добрым методом РНР .. без ЦМС написать ! ) там всеравно оно почти ничего из системы не берет ! )
тоесть просто подключить файлик - в ньом же и форма и обработчик  ! )
Ато задача простая а ебан.... туча ....
незнаю как создать плоскую форму подписки - тоесть сама форма -- проверки, занос в базу ! ) и выдача сообщение в той же форме -- Вы добавлены в подписку ! )

Thumbs up Thumbs down

22 Отредактировано cutter (09-03-2012 16:56:33)

Re: Captcha

учитывайте описание поста
http://forum.imagecms.net/viewtopic.php?pid=4402#p4402
и
http://forum.imagecms.net/viewtopic.php?pid=4367#p4367
если вы в коде не используете

$this->load->library('Form_validation'); // загрузка компонента проверки форм

тогда у вас будет критическая ошибка на

validation_errors()

и другие функции проверки
по ходу выполнения кода  загрузка компонента проверки форм должна встретиться только один раз.  также обратите внимание на порядок команд в примере

 public function __construct()
          {
          parent::__construct();
          $this->load->library('Form_validation');
          }

а ещё проще можете написать код? если вы ошиблись в шаблоне с условиями он весь не будет работать

Thumbs up Thumbs down