|
|
02.12.2009, 09:41
|
|
Хыиуду
Зарегистрирован: 2009-10-21
Сообщений: 156
|
Есть раздел "Контакты", в нем два компонента - простая веб-страничка и Интерактив: Гостевая книга/FAQ. Соответственно в суффиксе списка объектов в этом компоненте создана своя форма для добавления пользовательских сообщений с полями Имя, Email, Сообщение. Так страничка и выглядит: сверху веб-страничка с контактами, снизу форма.
Проблема в следующем: если одно или несколько полей не проходят валидацию (напр., пользователь ввел некорректный Email), то он попадает на стандартную форму добавления сообщения, т.е. без нашего оформления и без текста веб-странички наверху. А если поставить в условии добавления history.back() при неправильных полях - возвращается туда, куда надо, но все поля формы очищаются. Как можно совместить возвращение на нужную форму и сохранение ранее введенных данных?
|
|
|
03.12.2009, 18:51
|
|
ktotoff
АльтерЛан
Зарегистрирован: 2006-12-19
Сообщений: 339
|
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']));
|