Одна страница && control'ы && submit

Ex_Soft

Новичок
Одна страница && control'ы && submit

ЭстЪ php страница. Она вызывается сразу и action у нее на ее же саму. На ней находятся control'ы всякие разные. После submit'а у них теряются то, что в них ввели/выбрали. В ASP.NET вся эта кухня спрятана за кадром и работает без каких-либо телодвижений. В PHP, я так понял такого - ниц и все нуна самому руками разводить. Вот как это грамотно организовать? Т.е., к примеру, с select'ом это, пока, для меня выглядит а-ля:
PHP:
echo "<select name=SmthSelect>";
foreach($Smth as $key => $value)
{
        echo "<option value=",$key,$key==$_REQUEST["SmthSelect"] ? " selected" : "",">",$value;
};
echo "</select>";
Так люди делают? Или ЭстЪ какие-то std приемы решения данной задачи?
 

Ex_Soft

Новичок
Пльохо... А если таких control'ов с 50-т? Можно ли это дело как-то унифицировать? Так сказать, свести к минимуму copy/paste?
 

Духовность™

Продвинутый новичок
унифицировать
ну у меня примерно так

PHP:
<?
/**
 * Создает input-поле
 */
function make_input_text($name, $value='', $params=array())
{
    return '<input type="text" name="'.$name.
            '" value="'.htmlspecialchars($value, 3).'"'.tpl_generation_params($params).' />';
}

/**
* Вспомогательная функция для формирования из хеш-массива
* строки параметров вида ` ключ="значение"`, 
* для подстановки в html-теги.
* 
* @param array
* @return string
*/
function tpl_generation_params($params)
{
	if (!is_array($params))
	{
		return '';
	}

	$str = '';

	foreach ($params as $k => $v)
	{
		$str .= ' '.$k.'="'.$v.'"';
	}

	return $str;
}

// сценарий 

$myvar = '';

if (POST)
{
    // если ошибка, вывести значение в поле
    If (error) ....
    $myvar= $_POST['myvar'];
}

// шаблон 
?>
<form>
<?=make_input_text('myvar', $myvar)?>
</form>
 

x-yuri

Новичок
можешь такой функцией воспользоваться
PHP:
function selected( $param, $cur_key ) {

    echo $_REQUEST[ $param ] == $cur_key 
        ? ' selected ' : '';
}
тогда получишь
PHP:
echo '<option value="'.$key.'" 
    <?php selected('SmthSelect', $key) ?> >'.
        $value;
-~{}~ 24.12.08 16:50:

вместо echo можно
PHP:
<option 
    value="<?php echo $key ?>"  
    <?php selected('SmthSelect', $key) ?> >
        <?php echo $value ?>
 

Духовность™

Продвинутый новичок
x-yuri
а не судьба написать сразу нормальный хелпер, а не писать хелперы для каждого отдельного тега?
 

Ex_Soft

Новичок
Так... Теперь усложняем задачу:
1. как определить, что страница грузится первый раз или по submit'у? (Аналог IsPostBack ASP.NET)
2. Как все это свести в кучу, если при первой загрузке некоторым control'ам нужно присвоить некое стартовое значение?
 

x-yuri

Новичок
triumvirat
а не судьба написать сразу нормальный хелпер, а не писать хелперы для каждого отдельного тега?
"One ring to rule them all, one ring to find them, one ring to bring them all, and in the darkness bind them."? как ты это себе представляешь?

1. как определить, что страница грузится первый раз или по submit'у? (Аналог IsPostBack ASP.NET)
PHP:
function is_post_back( $name ) {
    return isset($_REQUEST[$name]);
}
$name - имя кнопки submit (атрибут name)

2. Как все это свести в кучу, если при первой загрузке некоторым control'ам нужно присвоить некое стартовое значение?
PHP:
function def_value( $value ) {
    if (! is_post_back())
        echo 'value="'.$value.'"';
}

<input type="hidden" <?php def_value('default value'); ?> >
может для некоторых контролов что-нибудь другое надо будет придумать

http://phpclub.ru/talk/showthread.php?s=&threadid=43521&rand=0
по поводу обработки переменных я бы поспорил. Считаю, что если обработка нужна, то она должна происходить явно, как-нибудь в декларативном виде
кстати, автор признался, что код стал нечитаемый
 

Духовность™

Продвинутый новичок
One ring to rule them all, one ring to find them, one ring to bring them all, and in the darkness bind them
слова господа бога? или что это такое?

PHP:
<option 
    value="<?php echo $key ?>"  
    <?php selected('SmthSelect', $key) ?> >
        <?php echo $value ?>
Ты предлагаешь мне ОДИН тег option выводить с помощью целых ТРЁХ функций? Будь добр, расскажи, кому такой API будет нужен.

$name - имя кнопки submit
не нужно ни к каким кнопкам привзятываться. 2 константы, определяющие метод:

PHP:
define('POST', $_SERVER['REQUEST_METHOD'] == 'POST');
define('GET',  $_SERVER['REQUEST_METHOD'] == 'GET');

Считаю, что если обработка нужна, то она должна происходить явно, как-нибудь в декларативном виде
кстати, автор признался, что код стал нечитаемый
в каком-каком виде?

то, что код стал не читаемый, к вопросу не относится.
 

x-yuri

Новичок
Ты предлагаешь мне ОДИН тег option выводить с помощью целых ТРЁХ функций? Будь добр, расскажи, кому такой API будет нужен.
ты ничего не предложил, а критикуешь

не нужно ни к каким кнопкам привзятываться
в каком-каком виде?
можно сделать так
PHP:
process_params(
    'name' => array( 
        'func' =>      'trim'
        'def_value' => 'значение по умолчанию' ),
    'email' => 'is_email',
    'notes' => 'nl2br' );
только функцию напиать надо
 

Ex_Soft

Новичок
http://pear.php.net/package/HTML_QuickForm/download
Dependencies:
PEAR Package: PEAR Installer 1.4.0 or newer
PEAR Package: HTML_Common 1.2.1 or newer
аналогично...
Значит ли это, что если я буду юзать PEAR, то хостеру прийдется у себя доставлять PEAR?
 

Иван 76

Новичок
Ex_Soft
Из википедии:

ASP.NET — технология создания веб-приложений и веб-сервисов от компании Майкрософт. Она является составной частью платформы Microsoft .NET и развитием более старой технологии Microsoft ASP.

Microsoft .NET Framework — программная технология, предназначенная для создания как обычных программ, так и веб-приложений (в качестве платформы для разработок впервые предложена корпорацией Microsoft).

Преимущества ASP.NET перед ASP
Пользовательские элементы управления (controls) позволяют выделять часто используемые шаблоны, такие как меню сайта

==================================================
Так вот. Сравнивать язык программирования PHP со средой разработки (Framework) - некорректно

Ваше незнание того чем отличается язык программирования от Framework не дает вам повода высказываться пренебрежительно по отношению к языку программирования.

В PHP есть своя среда разработки - Zend Framework, которая разработана разработчиками ядра языка PHP.

То что Вы хотите, - делается одной строкой:
$view->formSelect($name, $value, $attribs, $options);
http://framework.zend.com/manual/en/zend.view.helpers.html
 

Ex_Soft

Новичок
Иван 76
Так вот. Сравнивать язык программирования PHP со средой разработки (Framework) - некорректно
Я не сравниваю, а путем приведения аналогий пытаюсь как можно понятнее пояснить, что я хочу выяснить.
Иван 76
высказываться пренебрежительно
Будьте любезны, дайте точную цитату и ссылку на мой пост с таким высказыванием. Мало того - у меня самого, как раз, мысленно, чаша весов перевалила на PHP.
Иван 76
В PHP есть своя среда разработки - Zend Framework
Я об это не слыхал. Я просто тупо поднял apach, скачал пару-тройку халявных буквариков из инета и в mc по F4 тупо пытаюсь попробовать сделать то, я делаю на ASP.NET. Вот и все. Отсюда, м.б., на Ваш взгляд, такие тупые вопросы.
 

Иван 76

Новичок
[offtop]
Ex_Soft
ЭстЪ php страница. ... В ASP.NET вся эта кухня спрятана за кадром и работает без каких-либо телодвижений. В PHP, я так понял такого - ниц и все нуна самому руками разводить.
Явное сравнение, и полное отсутствие уважительного отношения в пренебрежительной подборке слов исключительно к языку программирования в этих предложениях
[/offtop]
 

Иван 76

Новичок
[offtop]
boombick
http://ru.wikipedia.org/wiki/Php
PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста», англ. Personal HomePage Tools[1] — «Инструменты для создания персональных веб-страниц») — язык программирования, созданный для генерирования HTML-страниц на веб-сервере и работы с базами данных.

http://ru.wikipedia.org/wiki/Framework
Framework — термин, имеющий размытое значение. Обычно используется в программировании, обозначая «простую концептуальную структуру, используемую для решения сложной, проблемной задачи». Значение этого термина существенно зависит от контекста его использования.

Software Framework — каркас программной системы (или подсистемы). Может включать вспомогательные программы, библиотеки кода, язык сценариев и другое ПО, облегчающее разработку и объединение разных компонентов большого программного проекта. Обычно объединение происходит за счёт использования единого API.

... в отличие от библиотеки, которая объединяет в себе набор близкой функциональности, framework содержит в себе большое число разных по тематике библиотек.
[/offtop]
 
Сверху