Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

43_HTML_FormPersister: новый взгляд на построение форм (Дмитрий Котеров, оценка: 3)
Goto page 1, 2, 3, 4, 5  Next
Author Message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Apr 26, 2005 6:08 pm (написано за 1 секунду)
   Post subject: 43_HTML_FormPersister: новый взгляд на построение форм
Reply with quote

dklab.ru/chicken/nablas/43.html
Back to top
View user's profile Send private message Send e-mail
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Tue Apr 26, 2005 7:55 pm (спустя 1 час 46 минут; написано за 35 секунд)
   Post subject:
Reply with quote

небольшая описка:
Quote:
Использование функции ob_start() раскрывает метод работы HTML_FormPersister. Чуть подробнее я расскажу о нем чуть позже, а пока замечу лишь, что модуль разбирает выходной поток скрипта (сгенерированную, но еще не отправленную в браузер HTML-страницу) в поисках элементов форм, анализирует их и подставляет требуемые атрибуты vallue, checked, selected и т. д. Происходит это все «на лету», и весьма быстро.
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 272
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Tue Apr 26, 2005 8:50 pm (спустя 54 минуты; написано за 52 секунды)
   Post subject:
Reply with quote

Миша Спларов
А посмотреть в колонку справа от статьи не пробовали? Там кое-что сказано о Ctrl+Enter ...
Back to top
View user's profile Send private message
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Wed Apr 27, 2005 2:49 pm (спустя 17 часов 58 минут; написано за 54 секунды)
   Post subject:
Reply with quote

Maus
даже не вспомнил об орфусе...
и это уже оффтопик.
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed May 04, 2005 9:02 pm (спустя 7 дней 6 часов 13 минут; написано за 3 минуты 7 секунд)
   Post subject: Дополнение
Reply with quote

А еще если дополнить проверку полей через Javascript
Code (JavaScript): скопировать код в буфер обмена
var formMessages = Array();
var formFocusElement = null;

function checkForm( form ) {
        formFocusElement = null;

        checkFormItem( form, 'select' );
        checkFormItem( form, 'input' );
        checkFormItem( form, 'textarea' );

        if( formMessages.length ) {
                var out = '   ' + ( ( formMessages.length > 1 ) ? '' : '' ) + ":\n";

                for( i = 0; i < formMessages.length; i++ ) {
                        out += ( i + 1 ) + ". " + formMessages[ i ] + "\n";
                }

                formFocusElement.focus();

                alert( out );

                window.formMessages = Array();

                return false;
        }


        return true;
}

function checkFormItem( form, title ) {
        var objs = form.getElementsByTagName( title );

        for( var i = 0; i < objs.length; i++ ) {

                if( objs[ i ].type == "submit" ) continue;

                if( objs[ i ].title.length && !objs[ i ].value ) {
                        formMessages[ formMessages.length ] = objs[ i ].title;
                        objs[ i ].style.backgroundColor = '#FFDDDD';

                        if( formFocusElement == null ) {
                                formFocusElement = objs[ i ];
                        }
                } else {
                        objs[ i ].style.backgroundColor = '#FFFFFF';
                }
        }
}
И в саму форму добавить:
Code (html): скопировать код в буфер обмена
<script (december.com/html/4/element/script.html) language="JavaScript" type="text/javascript" src="js/checkform.js"> (december.com/html/4/element/.html)</script>

<form (december.com/html/4/element/form.html) method="post" onsubmit="return checkForm(this)"> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="text" name="l" title=" "> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="password" name="p" title=""> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="submit"> (december.com/html/4/element/.html)
</form>
У элементов формы содержащих поле "title" будет выполняться проверка на заполненность/выбранность.
Back to top
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Thu May 12, 2005 2:22 pm (спустя 7 дней 17 часов 19 минут; написано за 1 минуту 36 секунд)
   Post subject:
Reply with quote

Ещё один баг - надо удалять атрибут "selected" в выпадающем списке, если значение не совпадает.
Иногда нет возможности указывать "default".
Code (php): скопировать код в буфер обмена
if ($curVal == $value)
  $opt['selected'] = 'selected';
else
  unset (www.php.net/unset)($opt['selected']);
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu May 12, 2005 2:37 pm (спустя 15 минут; написано за 55 секунд)
   Post subject:
Reply with quote

Стоп. Давайте это обсудим. А точно ли надо? Ведь может такое быть, что форма сгенерирована какой-то другой библиотекой, и тогда FormPersister не должен ее трогать - это основа его идеологии, "не вредить".
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Thu May 12, 2005 2:49 pm (спустя 11 минут; написано за 4 минуты 23 секунды)
   Post subject:
Reply with quote

Форма сгенерирована библиотекой, установлен признак "selected" на какой-либо опции.
В _POST или _GET лежит совсем другое значение.
ИМХО - та библиотека умеет либо генерировать форму с дефортными значениями (html_select_date (smarty.php.net/manual/en/language.function.html.select.date.php)), либо глючит.
В любом случае, должна быть возможность переставить selected.

Тем более что сейчас Form_Persister благополучно меняет значение на более "дальнее" по списку.
Это особенность браузеров - выбирать последнее значение с установленным признаком "selected".
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu May 12, 2005 2:57 pm (спустя 8 минут; написано за 1 минуту 16 секунд)
   Post subject:
Reply with quote

Я думаю, будет резонно реализовать другой алгоритм. Если ни у одного из option-ов не установлен select, вот тогда выбирать текущий элемент на основе $_GET или $_POST. А если хотя бы у одного установлен - вот тогда не трогать, что бы там ни лежало в $_GET или $_POST. Тогда остается совместимость с другими библиотеками.
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Thu May 12, 2005 3:24 pm (спустя 27 минут; написано за 2 минуты 12 секунд)
   Post subject:
Reply with quote

Как пример.
Библиотека html_select_date устанавливает дату текущей, независимо от пожеланий.
При этом, надо чтобы в форме была указана выбранная юзером дата.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu May 12, 2005 3:57 pm (спустя 33 минуты; написано за 1 минуту 14 секунд)
   Post subject:
Reply with quote

Ну так это уже тараканы конкретной библиотеки.

FormPersister проводит совершенно определенную политику: "не навреди". Например, все значения, указанные в <input value="..."> или в textarea, сохраняются. Не вижу, почему то же самое не должно касаться и select-ов.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu May 12, 2005 8:11 pm (спустя 4 часа 14 минут; написано за 32 секунды)
   Post subject:
Reply with quote

Пофиксил - сделал так, как говорил выше. Теперь FormPersister стал еще "прозрачнее" для подключающего кода.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sat May 14, 2005 4:47 pm (спустя 1 день 20 часов 35 минут; написано за 3 минуты 16 секунд)
   Post subject:
Reply with quote

Новая версия модуля.
На самом деле, изменения касаются только модуля HTML_SemiParser, HTML_FormPersister же не менялся.

1. Поменял алгоритм парсинга: теперь вместо preg_replace() с фиктивными строками для подстановки используется preg_split(). По идее, должно стать быстрее из-за этого, да и код прозрачнее. Жаль, тестов я не написал заранее...
2. Наконец-то сделал, чтобы контейнеры <script>...</script> (и другие - textarea, select, title и т.д.) игнорировались и не парсились! Итак, вот такой код теперь не трогается:
Code (html): скопировать код в буфер обмена
test
<script> (december.com/html/4/element/script.html)
// Must be totally ignored.
document.write('<input (december.com/html/4/element/input.html) type=text name=txt1 /> (december.com/html/4/element/.html) - must be empty!<br> (december.com/html/4/element/br.html)');
</script>
test
В общем, качество разбора HTML теперь стало еще лучше.
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Wed May 18, 2005 5:45 pm (спустя 4 дня 58 минут; написано за 1 минуту 19 секунд)
   Post subject:
Reply with quote

При разборе чекбокса надо тоже проверять значение, ибо при установке значения по-умолчанию полем hidden чекбокс отмечается.
Code (php): скопировать код в буфер обмена
  if ($attr['value'] == $this->getCurValue($attr, true)) $attr['checked'] = 'checked';
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu May 19, 2005 1:27 am (спустя 7 часов 41 минуту; написано за 36 секунд)
   Post subject:
Reply with quote

Перечитал 5 раз, но ничего не понял.
Уточните, пожалуйста.
P.S.
Кстати, мы на "вы" или на "ты"? Я уже забыл... :-)
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Thu May 19, 2005 11:17 am (спустя 9 часов 50 минут; написано за 4 минуты 54 секунды)
   Post subject:
Reply with quote

Checkbox имеет не булевое значение, а строковое.
Его особенность в том, что если он не отмечен, то значение на сервер не отправляется.
Для подстановки значения по-умолчанию удобно пользоваться скрытым полем.
Например:
Code (html): скопировать код в буфер обмена
<input (december.com/html/4/element/input.html) type="hidden" name="save_pass" value="false" /> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="checkbox" name="save_pass" value="true" /> (december.com/html/4/element/.html)
В этом случае при отправке на сервер формы установленный флаг затрёт значение, переданное через скрытое поле.

Т.о. надо проверять
1. совпадение атрибута value в полученных данных и в поле
2. при отсутствии атрибута value проверять в полученных данных значения 'on'

Итого:
Code (php): скопировать код в буфер обмена
case 'checkbox':
  if (!isSet (www.php.net/isset)($attr['name'])) return;
  if (isSet (www.php.net/isset)($attr['checked'])) return;
  if ($attr['value'] == $this->getCurValue($attr) || (!isset (www.php.net/isset)($attr['value']) && $this->getCurValue($attr) == 'on')) $attr['checked'] = 'checked';
  break;
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Thu May 19, 2005 3:16 pm (спустя 3 часа 59 минут; написано за 36 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров
Насчёт "вы", "ты" - не помню =)

Предлагаю на "ты" за счёт давности знакомства =)
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu May 19, 2005 3:25 pm (спустя 8 минут; написано за 13 секунд)
   Post subject:
Reply with quote

ОК, на "ты".

Тогда уж вот так:
Code (php): скопировать код в буфер обмена
                        case 'checkbox':
                                if (!isSet (www.php.net/isset)($attr['name'])) return;
                                if (isSet (www.php.net/isset)($attr['checked'])) return;
                                if ($this->getCurValue($attr, true) == (isSet (www.php.net/isset)($attr['value'])? $attr['value'] : 'on')) $attr['checked'] = 'checked';
                                break;
Поправил, выложил.

Кстати, у getCurValue() второй атрибут - для того, чтобы псевдоатрибут default у тэга срабатывал в булевском режиме.
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Thu May 19, 2005 6:56 pm (спустя 3 часа 30 минут; написано за 2 минуты 14 секунд)
   Post subject:
Reply with quote

Как полезную фичу вижу формирование нужного числа полей, в соответствии с пришедшими данными
Например:
Code (any language): скопировать код в буфер обмена
?f[]=1&f[]=2&f[]=3
Сейчас можно в hidden поле внести только одно значение, но в данном случае там будет слово 'Array'.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu May 19, 2005 7:11 pm (спустя 15 минут; написано за 12 секунд)
   Post subject:
Reply with quote

Да блин же уже!
Хорош загадками писать!
Как правильно задавать вопросы: статья, обязательная к прочтению (citforum.ru/howto/smart-questions-ru.shtml)
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6839
Карма: 133
   поощрить/наказать


PostPosted: Thu May 19, 2005 10:38 pm (спустя 3 часа 26 минут; написано за 20 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров, ничего, привыкнешь. Я сам по началу немного мучался. (=
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Fri May 20, 2005 12:58 am (спустя 2 часа 20 минут; написано за 57 секунд)
   Post subject:
Reply with quote

Да чего привыкать-то... По-моему, это элементарная невежливость - так писать. :-(
Выражается полное равнодушие к человеку, который потом будет читать сии письмена.
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Fri May 20, 2005 10:33 am (спустя 9 часов 35 минут; написано за 12 минут 41 секунду)
   Post subject:
Reply with quote

Это бывает от переутомления.
Понимаю, что имею в виду, но донести в понятном виде не получается =\

Дело в следующем:
Сейчас понадобилось на одном сайте сделать очень хитрый поиск - из 3 форм.
Объединить их в одну не получается - дизайн не позволяет.
Одна форма - собственно поиск.
Другая - фильтр по рубрикам.
Третья - фильтр по странам/областям.

Требуется сохранять во всех 3 формах статическую информацию, пришедшую из других форм.
Фильтры по странам и рубрикам содержат неопределённое число значений, т.о. невозможно создать несколько статических hidden полей для хранения значений в других формах.

Можно, конечно, руками пробегаться по массиву $_POST['country'] и генерировать нужное кол-во полей...
На мой взгляд, такую возможность вполне можно реализовать в FormPersister'е и переложить на него всю рутину.

Как это будет работать:
В форме я указываю поле
Code (html): скопировать код в буфер обмена
<input (december.com/html/4/element/input.html) type="hidden" name="country[]" /> (december.com/html/4/element/.html)
Если на эту страницу приходит одно значение в $_POST['county'], то просто заполняем value для этого поля.
Если же приходит набор значений, то генерируем несколько hidden полей с соответствующими value.

PS: На данный момент при получении массива значений для поля FormPersister подставляет слово Array.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Fri May 20, 2005 11:25 am (спустя 51 минуту; написано за 1 минуту 24 секунды)
   Post subject:
Reply with quote

Пока что мне кажется, что такое поведение слишком непредсказуемо и неочевидно.
Обычно промежуточные значения хранят в сессии просто - для того она и нужна, собственно.
Так что лично я сейчас против того, чтобы добавлять указанную функциональность в FormPersister (к тому же, ее легко реализовать, написав отдельный модуль).
Back to top
View user's profile Send private message Send e-mail
CMS
Участник форума



Joined: 21 Apr 2005
Posts: 45
Карма: 0
   поощрить/наказать


PostPosted: Sat May 28, 2005 4:16 pm (спустя 8 дней 4 часа 51 минуту; написано за 3 минуты 29 секунд)
   Post subject:
Reply with quote

В Perl есть модуль HTML::Template.
Для PHP я нашел недавно PHP-HTML::Template (только пришлось модифицировать класс Node - там явная ошибка автора).
Вот я и думаю, зачем ДК изобретает велосипед?..
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sat May 28, 2005 5:04 pm (спустя 47 минут; написано за 1 минуту 28 секунд)
   Post subject:
Reply with quote

Во-первых, тогда уж не "изобретаю", а "изобрел", ибо модулю уже 2 года без малого. А если вспомнить, что изначально это дело было написано на Perl, то все 4 будет.
Во-вторых, Вы уверены, что PHP-HTML::Template имеет точно ту же функциональность, что и FormPersister? Лично мне сомнительно.
Back to top
View user's profile Send private message Send e-mail
CMS
Участник форума



Joined: 21 Apr 2005
Posts: 45
Карма: 0
   поощрить/наказать


PostPosted: Sun May 29, 2005 1:14 am (спустя 8 часов 9 минут; написано за 8 минут 32 секунды)
   Post subject:
Reply with quote

Ну хорошо, изобрел... Хотя тому же перловому HTML::Template уже 6 лет.
Конечно, поведение указанных мной модулей отличается от вашего. В PHP-HTML::Template нет associate-опции как в перловой версии (хотя ее добавить труда большого не составит). Но, мое мнение: лучше самому устанавливать переменные (не важно GET или POST), используемые в шаблоне, чем поручать это сделать модулю. Вроде бы, вы как раз это и обсуждаете, что иногда ваш модуль срабатывает "неверно".
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sun May 29, 2005 11:31 am (спустя 10 часов 17 минут; написано за 1 минуту 28 секунд)
   Post subject:
Reply with quote

CMS
Не знаю, как вы, но после использования стало проще. все формы переписал за несколько часов, несколько вспомогательных функций.
Большое спаибо за библиотеку, очень полезная!!
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Jun 08, 2005 11:54 am (спустя 10 дней 22 минуты; написано за 1 минуту 2 секунды)
   Post subject:
Reply with quote

Новая версия - 1.90.
Расширенная поддержка пременных в качестве источника данных для select-а.
Code (php): скопировать код в буфер обмена
$options['some']['key'] = array (www.php.net/array)('one' => 'From 1d array', 'two' => 'Other from 1d');
$options['other']['key'] = array (www.php.net/array)(
  'Group1' => array (www.php.net/array)('one'   => 'From 2d array',       'two'  => 'Another from 2d'),
  'Group2' => array (www.php.net/array)('three' => 'Again from 2d array', 'four' => '2d vah-vah!'),
);
Code (html): скопировать код в буфер обмена
  <select (december.com/html/4/element/select.html) name=sel-1>
    options[some][key]
  </select>
  <select (december.com/html/4/element/select.html) name=sel0>
    <option (december.com/html/4/element/option.html) value="0"> (december.com/html/4/element/.html)0000</option>
    $options[some][key]
    <option (december.com/html/4/element/option.html) value="1"> (december.com/html/4/element/.html)1111</option>
  </select>
  <select (december.com/html/4/element/select.html) name=sel1>
    <optgroup (december.com/html/4/element/optgroup.html) label="aaa"> (december.com/html/4/element/.html)
      <option (december.com/html/4/element/option.html) value="0"> (december.com/html/4/element/.html)rrrrr</option>
      options[some][key]
    </optgroup>
    options[other][key]
  </select>
  <select (december.com/html/4/element/select.html) name=sel2 size="1"> (december.com/html/4/element/.html)
    <optgroup (december.com/html/4/element/optgroup.html) label="First"> (december.com/html/4/element/.html)
      <option (december.com/html/4/element/option.html) value=a>aaaaaaaaaaaaa
      <option (december.com/html/4/element/option.html) value=b>bbbbbbbbbbbbb
    </optgroup>
    <optgroup (december.com/html/4/element/optgroup.html) label="Second"> (december.com/html/4/element/.html)
      <option (december.com/html/4/element/option.html) value=c>ccccccccccccc
    </optgroup>
  </select>
dklab.ru/chicken/nablas/demo/HTML_FormPersister/test/FormPersister/t_formpersister.php
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Jun 08, 2005 11:57 am (спустя 2 минуты; написано за 1 минуту 7 секунд)
   Post subject:
Reply with quote

Если используются переменные в середине между несколькими option-ами, нужно обязательно вставлять закрывающий </option>.
На отдельных строках переменные указывать не обязательно.
Пробельные символы перед и после имен переменных игнорируются.
Back to top
View user's profile Send private message Send e-mail
Дамир Хуснатдинов
Заглянувший



Joined: 31 Mar 2005
Posts: 8
Карма: 1
   поощрить/наказать

Location: Новосибирск

PostPosted: Tue Jun 14, 2005 12:08 pm (спустя 6 дней 11 минут; написано за 3 минуты 8 секунд)
   Post subject:
Reply with quote

Может быть наряду с default=... добавить атрибут скажем <input type=.... passthru>, говорящий о том что этот input трогать не надо. Для паролей, к примеру, или для картинки-защиты-от-роботов. Видел решение с javascript'ом, но мне кажется, что лучше один раз немного нагрузить класс чем каждый раз нагружать себя.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Jun 14, 2005 5:37 pm (спустя 5 часов 28 минут; написано за 30 секунд)
   Post subject:
Reply with quote

Так он же и не трогается, если value задан явно. Разве нет?
Back to top
View user's profile Send private message Send e-mail
Дамир Хуснатдинов
Заглянувший



Joined: 31 Mar 2005
Posts: 8
Карма: 1
   поощрить/наказать

Location: Новосибирск

PostPosted: Thu Jun 16, 2005 7:41 am (спустя 1 день 14 часов 4 минуты; написано за 46 секунд)
   Post subject:
Reply with quote

Ой, действительно не трогается :) Я с default'ом про value забыл совсем.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Jun 16, 2005 11:43 am (спустя 4 часа 2 минуты; написано за 2 минуты 7 секунд)
   Post subject:
Reply with quote

Основая идеология FormPersister - "не трогать то, что работает". Т.е. он должен быть "прозрачным" для приложений, которые сами выставляют все value, selected, checked и т.д., т.е. действуют по стандарту. А вот если происходит отход от стандарта (например, пропущен атрибут, value), вот тогда FormPersister берет управление на себя.

Фактически, он задумывался, чтобы можно было взять любой, сколь угодно кривой и архаичный скрипт, и подключитьь к нему FormPersister без каких-либо побочных эффектов. Я уже для многих проектов так и делал, кстати.
Back to top
View user's profile Send private message Send e-mail
aleksey.stepanov
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Jun 22, 2005 9:25 am (спустя 5 дней 21 час 42 минуты; написано за 1 минуту 41 секунду)
   Post subject:
Reply with quote

господа, а как на счет radio и checkbox? можно ли как-то автозаполнять их. допустим у меня есть два radio для выбора пола. как мне установить их с помощью FormPersister в какое-либо из значений. тоже и для checkbox.
Back to top
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 272
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Wed Jun 22, 2005 10:09 am (спустя 43 минуты; написано за 48 секунд)
   Post subject:
Reply with quote

aleksey.stepanov
Имхо, из примера dklab.ru/chicken/nablas/demo/HTML_FormPersister/test/FormPersister/t_formpersister.php всё вполне ясно.
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Jun 22, 2005 10:38 am (спустя 29 минут; написано за 3 минуты 50 секунд)
   Post subject:
Reply with quote

Maus да, спасибо за реакцию, этот пример я уже видел. меня интересует можно ли указав в коде
Code (php): скопировать код в буфер обмена
$_POST['some_ctrl'] = 3
и получить из
Code (html): скопировать код в буфер обмена
<input (december.com/html/4/element/input.html) type="radio" name="some_ctrl" value="1"> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="radio" name="some_ctrl" value="2"> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="radio" name="some_ctrl" value="3"> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="radio" name="some_ctrl" value="4"> (december.com/html/4/element/.html)
результат
Code (html): скопировать код в буфер обмена
<input (december.com/html/4/element/input.html) type="radio" name="some_ctrl" value="1"> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="radio" name="some_ctrl" value="2"> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="radio" name="some_ctrl" value="3" checked="checked"> (december.com/html/4/element/.html)
<input (december.com/html/4/element/input.html) type="radio" name="some_ctrl" value="4"> (december.com/html/4/element/.html)
т.е. хотелось бы иметь, аналогичный <option> механизм.
Back to top
aleksey.stepanov
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Jun 22, 2005 11:35 am (спустя 56 минут; написано за 28 секунд)
   Post subject:
Reply with quote

вопрос снят. разобрался. работает именно так как и хотелось. извините за беспокойство.
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Jun 22, 2005 11:47 am (спустя 12 минут; написано за 4 секунды)
   Post subject:
Reply with quote

М-да...
Back to top
View user's profile Send private message Send e-mail
JC_Piligrim
Заглянувший



Joined: 19 Feb 2005
Posts: 8
Карма: 2
   поощрить/наказать

Location: Краснодарский край

PostPosted: Wed Jun 29, 2005 12:16 pm (спустя 7 дней 28 минут; написано за 11 минут 51 секунду)
   Post subject:
Reply with quote

Уважаемый Дмитрий Котеров!

Я попытался подключить FormPersister к своим скриптам, и нарвался на неприятный ньюанс. Дело в том, что форма регистрации находится по адресу
Code (html): скопировать код в буфер обмена
http://www.somehost.ru/index.php?action=register
В исходной форме такой код:
Code (html): скопировать код в буфер обмена
<form (december.com/html/4/element/form.html) method="post" action="<?php ___url(); ?>">

...

</form>
Функция как раз и формирует этот url (а именно - index.php?action=register), чтобы браузер отправлял данные не просто скрипту index.php, а именно с параметром ?action=register, чтобы скрипт обрабатывал их именно в том блоке, который инклюдится в соответствии с этим параметром (в данном случае, это "register"). Но FormPersister просто вырезает (
Code (php): скопировать код в буфер обмена
$attr['action'] = preg_replace (www.php.net/preg_replace)('/\?.*/s', '', $_SERVER['REQUEST_URI']);
) все после '?' включительно, и заменяет их параметрами при методе get, либо просто затирает при post. Прошу вас, исправте, пожалуйста, этот модуль, чтобы он оставлял в строке запроса все, пришедшее с $_REQUEST_URI.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Goto page 1, 2, 3, 4, 5  Next
Page 1 of 5    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

Но если не поверите и все же попытаетесь - как только увидите, что все безрезультатно, удалите свой пост, пожалуйста. Модераторы тоже люди, нехорошо, если они погрязнут в тоннах спама.
     

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML