Регистрация
Вход через соцсети
Восстановление пароля

Уход к стандартной форме при ошибке валидации

Новый топик
02.12.2009, 09:41
Ответить | Цитировать
Хыиуду

Зарегистрирован:
2009-10-21
Сообщений: 156

Есть раздел "Контакты", в нем два компонента - простая веб-страничка и Интерактив: Гостевая книга/FAQ. Соответственно в суффиксе списка объектов в этом компоненте создана своя форма для добавления пользовательских сообщений с полями Имя, Email, Сообщение. Так страничка и выглядит: сверху веб-страничка с контактами, снизу форма.
Проблема в следующем: если одно или несколько полей не проходят валидацию (напр., пользователь ввел некорректный Email), то он попадает на стандартную форму добавления сообщения, т.е. без нашего оформления и без текста веб-странички наверху. А если поставить в условии добавления history.back() при неправильных полях - возвращается туда, куда надо, но все поля формы очищаются. Как можно совместить возвращение на нужную форму и сохранение ранее введенных данных?
03.12.2009, 18:51
Ответить | Цитировать
ktotoff
АльтерЛан

Зарегистрирован:
2006-12-19
Сообщений: 330

VlastV писал(а):
По моему 5-и летнему опыту могу сказать, что такое сделать нельзя.


Слишком категорично. Извращения веб-девелоперским уставом только поощряются улыбка

Поскольку я уже некоторое время нахожусь вдали от боевого стенда и проверить не могу, могу только предположить.
Технически, как мне кажется, в форме можно создать дополнительное скрытое поле (искусственное, в самом компоненте отсутствующее), что-то вроде formBackLink. Если передать этому полю значение $GLOBALS[client_url], в теории это можно использовать для точки локации в header.
Но совершенно точно, что уведомления об ошибках будут потеряны.

Вообще, по теме. Использовать Java для большинства нестарперских проектов вполне нормально. У меня в куче случаев придумать безджавную альтернативу, заявленную по ТЗ, совершенно нереально. Т.е. можно обеспечить какую-то отработку функционала, но непременно теряются важные моменты, наполняющие этот функционал смыслом.
Поэтому надо почаще плевать (не выходя за рамки приличий, конечно) на пользователей без Java и всяких там IE6 улыбка


...жизнь прекрасна, когда правильно подобраны антидепрессанты...
02.12.2009, 16:40
Ответить | Цитировать
VlastV
qb.digital

Зарегистрирован:
2005-11-02
Сообщений: 202

По моему 5-и летнему опыту могу сказать, что такое сделать нельзя.
Есть два пути решения:
1. Создать дочерний макет, где через s_list_class получать контакты, тогда в разделе останеться один активный раздел - ваша форма.
2. В альтернативной форме добавления, вызвать s_list_class для вывода контактов.

Разработка сайтов на CMS NetCat. Портфолио http://vlastv.ru/ E-mail: me [at] vlastv [dot] ru ; ICQ: 66117050
02.12.2009, 18:28
Ответить | Цитировать
Хыиуду

Зарегистрирован:
2009-10-21
Сообщений: 156

В итоге все было сделано более кондово - прикрутил яваскрипт, который не давал вводить неправильные данные улыбка
03.12.2009, 00:30
Ответить | Цитировать
Гость
Гость

А если у пользователя отключены скрипты? То он введет фигню
04.12.2009, 15:03
Ответить | Цитировать
VlastV
qb.digital

Зарегистрирован:
2005-11-02
Сообщений: 202

Kraeved писал(а):
VlastV писал(а):
По моему 5-и летнему опыту могу сказать, что такое сделать нельзя.


Слишком категорично. Извращения веб-девелоперским уставом только поощряются улыбка


Мое решение работает без JS, ваш вариант с header не подходит так как вы теряете ошибки (о чем вы и сказали).

Т.е. в моем варианте, это не совсем красиво с точки зрения реализации, но на 100% решает задачу для фронтенда.

Разработка сайтов на CMS NetCat. Портфолио http://vlastv.ru/ E-mail: me [at] vlastv [dot] ru ; ICQ: 66117050
09.12.2009, 13:06
Ответить | Цитировать
ooo
ИнфоТехноПроект

Зарегистрирован:
2009-06-18
Сообщений: 57

Gость писал(а):
А если у пользователя отключены скрипты? То он введет фигню


Фигня! Решается вопрос! Если у юзера отключены скрипты, то в поле "Условия добавления объекта" делаем так:

Код:

if($f_Captcha != "ключевоеслово") {
$posting = 0;
#information text
$warnText = "Необходимо заполнить антиспам-поле! Введите "ключевоеслово"!";
}


Спамеры не пройдут!!! )))) круто
20.04.2010, 13:54
Ответить | Цитировать
Хыиуду

Зарегистрирован:
2009-10-21
Сообщений: 156

Вопрос встал в еще более интересном ключе.
Есть несколько сайтов, сделанных на одной копии Неткат и висящих на одной базе данных.
На одном из них (условно site1.ru) есть раздел "Вопрос-ответ" с соответствующим компонентом
На каждом из них есть форма добавления вопроса, в которой прописаны номер раздела и компонента, находящихся на site1.ru.
Все работает нормально, но если ввести некорректные данные (e-mail не по форме, неправильную капчу), скажем, с site2.ru, система переходит на site2.ru/netcat/add.php, где требует ввести корректные данные, но при этом макет дизайна на этой странице site2.ru почему-то берется прямиком с site1.ru. С чем это может быть связано?
21.04.2010, 08:40
Ответить | Цитировать
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

это связано с неправильной настройкой неткэта или хостинга.

насколько я понимаю текущий сайт это переменная $current_catalogue[Catalogue_ID] она определяется исходя из сравнения домена в адресной строке site2.ru с доменами которые указаны в настройках сайта, если эта переменная не определена, то будет показан сайт по умолчанию. соответственно в /netcat/add.php текущий сайт по каким то причинам не определился и поэтому показывается дизайна главного сайта.

варианты:
1. неправильная настройка хостинга;
2. неправильная настройка vars.inc.php;
3. неправильная настройка многосайтовости.
21.04.2010, 08:55
Ответить | Цитировать
Хыиуду

Зарегистрирован:
2009-10-21
Сообщений: 156

В итоге все было сделано так: в форме для добавления висел следующий код:
if ($_POST[forced_template_id])
$tempid=intval($_POST[forced_template_id]);
else
{
$tempid=$current_sub[Template_ID];
$parnid=$db->get_var("select Parent_Template_ID from Template where Template_ID=$tempid");
$tempid=$parnid? $parnid : $tempid;
}
$result.=" <input name=forced_template_id type=hidden value=$tempid>

А в /netcat/require/index.php после
if ($template) {
$nc_core->template->set_current_by_id($template);
}
было вставлено
if (intval($_POST['forced_template_id']))
$nc_core->template->set_current_by_id(intval($_POST['forced_template_id']));
198 196 2010-04-21 08:55:13 9815
Описание проекта