Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Конструктор формы
twin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 3 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 12 дней


Отсюда.

Итак. Я не имел плотно дела с CMS, плохо представляю даже, с чего начать. Ну раз это менеджер, логично предположить, что во главу угла будут поставлены формы. Вот и первая потребность - конструктор форм.

Стоимость скрипта - 2000 рублей.

Вот как я себе это представляю:
// Конструктор формы
class Form
{
protected $tag;

public function set($tagName)
{
$this->tag = (object)['tagName' => $tagName];
return $this;
}

public function get()
{
return $this->tag;
}

public function addAttrbute($attribute, $value)
{
Validate::checkTag($this->tag);
$this->tag->$attribute = $value;
return $this;
}

public function createHtml()
{
$tag = '<'. $this->tag->tagName .' ';

foreach ($this->tag as $attribute => $value) {

if ($attribute === 'tagName') {
continue;
}

$tag .= $attribute .'="'. $value .'" ';
}

return $tag .'>';
}
}


// Валидация аттрибутов
class Validate
{
public static function checkTag($tag)
{
if (empty($tag->tagName)) {
throw new Exception('No tag name');
}
}
}




////////////////////////////////////
$form = new Form;

$input = $form->set('input')
->
addAttrbute('class', 'some')
->
addAttrbute('size', 5)
->
createHtml();

var_dump($input);

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

Нужно:
1. Добавить события
2. Придумать, как бороться с "кривыми" тегами типа textarea, button и т.п.
3. А так же с группами радио и чекбоксов.
3. Решить вопрос с лейблами.
4. Доделать валидатор аттрибутов и событий, учтя максимум нюансов
5. Может еще чего я забыл, но нужнО в генераторе :)
3. Привести это безобразие в порядок и скормить фреймворку.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25988
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 22 дня
Карма: 725

Не курю:
1 год, 2 месяца, 8 дней


очень похоже на мою реализацию

Валидация
<?php
/**
*
*
@author Vasinsky Igor
*
@email igor.vasinsky@gmail.com
* @copyright 2013
*/


class Validate{
protected $rules;
private $errors = array();
private $data = array();
public $error_text;
protected $errorData = array();

//Манипуляция с данными
// float - к дробному числу
// string - к строке
// sha1 - сделает hash алгоритмом sha1
// trim - утсечёт пробелы
// html - аналог strip_tags()

//Примечание
// notempty не пусто
// regexp[шаблон с делиметерами]
// length[мин,макс]
// code[index эл-та в $_SESSION] - для капчи
// confirm[имя поля с которым сравнивается]
//


protected $text_error = array(
'notempty' => 'Поле не может быть пустым',
'length' => 'Поле содержит неверное кол-во символов',
'email' => 'Поле заполнено не корректно',
'regexp' => 'Поле заполнено не корректно',
'code' => 'Введён не правильный защитный код',
'confirm'=> 'Введённые пароли не совпадают',
'id'=>'Поле заполнено не верно, ожидаются только цифры',
'getName'=>'Произошла ошибка присвоения текста ошибки для поля, возможно вы пропустили установку правил для поля'
);

public function __construct(){

}


/**
* Установка возвращаемого текста ошибки
*
@param string
*/

public function setErrorText($error_text){
$this->error_text = $error_text;
$dtrace = debug_backtrace();

$index = count($dtrace[0]['object']->rules)-1;

if(array_keys($dtrace[0]['object']->rules[$index])){

$t_arr = array_keys($dtrace[0]['object']->rules[$index]);
}

if(isset($t_arr[0])){
$this->errorData[$t_arr[0]] = $this->error_text;
}
else
$this->text_error['getName'];

return $this;
}

public function addRules($rules){
$this->rules[] = $rules;
return $this;
}

protected function _empty($nameTag){
$_REQUEST[$nameTag] = trim($_REQUEST[$nameTag]);

if(empty($_REQUEST[$nameTag]))
$this->errors[$nameTag]['notempty'] = isset($this->errorData[$nameTag])
?
$this->errorData[$nameTag]
:
$this->text_error['notempty'];
else
$this->insertData($nameTag);
}

protected function _id($nameTag){
if(!is_numeric($_REQUEST[$nameTag])){
$this->errors[$nameTag]['id'] = isset($this->errorData[$nameTag]) ? $this->errorData[$nameTag] : $this->text_error['id'];
}
else
$this->insertData($nameTag);
}

protected function _float($nameTag){
$_REQUEST[$nameTag] = (float)$_REQUEST[$nameTag];
$this->insertData($nameTag);
}

protected function _int($nameTag){
$_REQUEST[$nameTag] = (int)$_REQUEST[$nameTag];
$this->insertData($nameTag);
}

protected function _sha1($nameTag){
$_REQUEST[$nameTag] = sha1($_REQUEST[$nameTag]);
$this->insertData($nameTag);
}

protected function _string($nameTag){
$_REQUEST[$nameTag] = (string)$_REQUEST[$nameTag];
$this->insertData($nameTag);
}

protected function _length($nameTag, $tv){
$limit = rtrim($tv, ']');

if(empty($limit[0])) return;

$t = explode(',',$limit[0]);
$min = (int)$t[0];
$max = isset($t[1]) ? (int)$t[1] : 2000;
$length = mb_strlen(trim($_REQUEST[$nameTag]), 'utf-8');

if($length<$min || $length>$max){
$this->errors[$nameTag]['length'] = isset($this->errorData[$nameTag]) ? $this->errorData[$nameTag] : $this->text_error['length'];

}
else
$this->insertData($nameTag);
}

protected function _trim($nameTag){
$_REQUEST[$nameTag] = trim($_REQUEST[$nameTag]);
$this->insertData($nameTag);
}

protected function _html($nameTag){
$_REQUEST[$nameTag] = strip_tags($_REQUEST[$nameTag]);
$this->insertData($nameTag);
}

protected function _email($nameTag){
if(!filter_var($_REQUEST[$nameTag], FILTER_VALIDATE_EMAIL))
$this->errors[$nameTag]['email'] = isset($this->errorData[$nameTag]) ? $this->errorData[$nameTag] : $this->text_error['email'];
else
$this->insertData($nameTag);

}

protected function _url($nameTag){
if(!filter_var($_REQUEST[$nameTag], FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED))
$this->errors[$nameTag]['url'] = isset($this->errorData[$nameTag]) ? $this->errorData[$nameTag] : $this->text_error['url'];
else
$this->insertData($nameTag);
}

protected function _confirm($nameTag, $tv){
$confirm = rtrim($tv, ']');

if(!isset($this->errors[$tv])){
if($_REQUEST[$nameTag] != $_REQUEST[$confirm]){
unset($this->errors[$nameTag]['errors']);
$this->errors[$nameTag]['confirm'] = isset($this->errorData[$nameTag]) ? $this->errorData[$nameTag] : $this->text_error['confirm'];
}
}
}


protected function _regexp($nameTag, $tv){
if(!preg_match($tv, $_REQUEST[$nameTag])){
$this->errors[$nameTag]['regexp'] = isset($this->errorData[$nameTag]) ? $this->errorData[$nameTag] : $this->text_error['regexp'];
}
else
$this->insertData($nameTag);
}

protected function _code($nameTag, $tv){
if(!isset($_REQUEST[$nameTag])){
$this->errors[$nameTag]['code'] = 'В форме отсутствует поле: '.$nameTag;
}
else{
if($_SESSION[$tv] != $_REQUEST[$nameTag])
$this->errors[$nameTag]['code'] = isset($this->errorData[$nameTag])
?
$this->errorData[$nameTag]
:
$this->text_error['code'];
else
$this->insertData($nameTag);
}
}


private function parseRules($target){
$this->target = $target;

foreach($target as $nameTag=>$l){

$tempRules = explode('|',$l);

foreach($tempRules as $k=>$v){
if(preg_match("#code#", $v)){
$tv = rtrim(strtr($v, array('code['=>'')),']');

$v = 'code';
}
elseif(preg_match("#regexp#", $v)){
$tv = rtrim(strtr($v, array('regexp['=>'')),']');
$v = 'regexp';
}
else{
$v = explode("[", $v);
$tv = isset($v[1]) ? $v[1] : null;
$v = $v[0];
}
switch($v){
case 'notempty' :
$this->_empty($nameTag);
break;
case 'length':
if($tv != null)
$this->_length($nameTag, $tv);
break;
case 'trim' :
$this->_trim($nameTag);
break;
case 'html' :
$this->_html($nameTag);
break;
case 'email' :
$this->_email($nameTag);
break;
case 'confirm' :
$this->_confirm($nameTag,$tv);
break;
case 'regexp' :
$this->_regexp($nameTag,$tv);
break;
case 'code' :
$this->_code($nameTag,$tv);
break;
case 'id' :
$this->_id($nameTag);
break;
case 'float' :
$this->_float($nameTag);
break;
case 'string' :
$this->_int($nameTag);
break;
case 'sha1' :
$this->_int($nameTag);
break;
}
}
}

}


private function insertData($nameTag){
$this->data[$nameTag] = $_REQUEST[$nameTag];
}

public function getData(){
return $this->data;
}

public function getAllErrors(){
return $this->errors;
}

public function getErrors(){
$firstErrors = array();

foreach($this->errors as $k=>$err){
$firstErrors[$k] = array_shift($err);
}

return $firstErrors;
}

protected function validate(){
if(is_array($this->rules)){

foreach($this->rules as $k=>$v){
$this->parseRules($v);
}

if(count($this->errors)>0){
$success = false;
}
else{
$success = true;
}
return $success;
}
}
}

?>


Конструктор
<?php
/**
* Класс рендеринга html форм
*
@author Vasinsky Igor
*
@email igor.vasinsky@gmail.com
* @copyright 2013
*/


class HTMLForm extends Validate{
public $action;
public $method;
public $nameForm;
public $paramsForm;

const EndTagInput = ' rel="i"/>';
const EndTagSelectInside = ' rel="s"';
const EndTagSelect = '</select>';
const EndTagOption = ' rel="o">';
const EndTagTextarea = ' rel="t">';

protected $elems = array(
'input'=>'<input rel="i"/>',
'select'=>'<select rel="s"></select>',
'option'=>'<option rel="o"></option>',
'textarea'=>'<textarea rel="t"></textarea>'
);

public function __construct(){
return parent::__construct();
}

public function setRules($rules){
parent::addRules(array($this->name=>$rules));
return $this;
}

//создание свойства класса динамически
public function createProperty($name, $value){
if(!empty($value))
$this->$name = $value;
}
//проверка наличия свойства у класса
private function checkProperty($name){
if(!property_exists(__CLASS__, $name)){
$this->createProperty($name,$name);
$this->name = $name;
}
else
$this->name = $name;
}
//начало рисования формы
//Самые распространнённые у формы 3 мараметра, буду задавать обязательными аргументами

public function open($nameForm, $action, $method, $arg = null){
$this->action = $action;
$this->method = $method;

$this->arg = explode(',', $arg);

//если был 3й аргумент - соберём все параметры в стрку вида arg1="param1" arg2="param2"
if(is_array($this->arg)){

$this->paramsForm = null;

foreach($this->arg as $val){

if($val != null){
$temp = explode("|", $val);
$this->paramsForm .= ' '.$temp[0].'="'.$temp[1].'" ';
}
}
}

$this->form[$this->nameForm] = array();
$this->nameForm = $nameForm;
$this->form[$this->nameForm]['begin'] = '<form name="'.$this->nameForm.'" method="'
.$this->method.'" action="'.$this->action.'" '.$this->paramsForm.'>';
}
//Закрывает формы (чисто для солидарности:))
public function close(){
$this->form[$this->nameForm]['end'] = '</form>';
return $this->form[$this->nameForm];
}
//Метод парсит тег и производит вставки атрибутов и т.д.
private function collectElem($name, $elem, $endTag){
$this->elem = $elem;
$this->checkProperty($name);
$this->parentMethodName = __CLASS__.'::set'.ucfirst($this->elem);
$this->parentMethod = strtr($this->elems[$this->elem], array($endTag=>' name="'.$this->$name.'"'.$endTag));
}
//Собирает textarea
public function setTextarea($name){
$this->collectElem($name, 'textarea', self::EndTagTextarea);
return $this;
}
//собирает input всех типов
public function setInput($name){
$this->collectElem($name, 'input', self::EndTagInput);
return $this;
}
//инициализирует тег select
public function setSelect($name){
$this->collectElem($name, 'select', self::EndTagSelectInside);
return $this;
}
//собирает теги option
public function setOption($name){
$this->checkProperty($name);
$this->parentMethodName = __METHOD__;
$this->parentMethod = strtr($this->elems['option'], array(self::EndTagOption =>self::EndTagOption.$this->$name));

return $this;
}
//устанавливает атрибуты тегам
public function setAttr($attr){
$this->attr = explode('|', $attr);

if(is_array($this->attr)){
if(isset($this->attr[1])){
$this->parentMethod = strtr($this->parentMethod,
array($this->getEndTag() => ' '.$this->attr[0].'="'.$this->attr[1].'"'.$this->getEndTag()));
}
else{
$this->parentMethod = strtr($this->parentMethod,
array($this->getEndTag() => ' '.$this->attr[0].' '.$this->getEndTag()));
}
}



return $this;
}

//дописывает текст в option,checkbox, radio в поле textarea
public function setText($text){
if(!property_exists(__CLASS__, $text)){
$this->createProperty($text,$text);
$this->text = $text;
}
else
$this->text = $text;

if(is_array($this->attr) && !empty($this->$text)){
$this->parentMethod = strtr($this->parentMethod,
array($this->getEndTag() => $this->getEndTag().$this->$text));
}
return $this;
}

//промежуточное сохранение в ассоц массив
private function saveInArray($sub = false,$innerNameSub = null){
if($sub)
$this->form[$this->nameForm][$this->name][] = $this->parentMethod;
else if(!$sub)
$this->form[$this->nameForm][$this->name] = $this->parentMethod;
else if($innerNameSub != null){
$this->form[$this->nameForm][$innerNameSub.'_options'][$this->name] = $this->parentMethod;
return $this->form[$this->nameForm][$innerNameSub.'_options'];
}
}

//формирует Input
public function addInput(){
if(preg_match('#\[\]#', $this->parentMethod))
$this->saveInArray();
else
$this->saveInArray();

$this->parentMethod = '<input rel="i"/>';
}
//формирует select
public function addSelect(){
$this->saveInArray();
$this->parentMethod = '<select rel="s"></select>';
}
//формирует textarea
public function addTextarea(){
$this->saveInArray();
$this->parentMethod = '<textarea rel="t"></textarea>';
}
//формирует список option и собирает вместе с указанным select
public function addOption($select){
//ПРомежуточное сохранение вида тега option, далее он храниться в подмассиве select
$this->form[$this->nameForm][$select.'_options'][$this->name] = $this->parentMethod;
$temp = $this->form[$this->nameForm][$select.'_options'];
$this->form[$this->nameForm][$select] = strtr($this->form[$this->nameForm][$select],
array(self::EndTagSelect =>
$temp[$this->name].PHP_EOL.self::EndTagSelect)
);

$this->parentMethod = '<option rel="o"></option>';
return $this;
}
//ничё интересного
private function getEndTag(){
switch($this->parentMethodName){
case __CLASS__.'::setTextarea' : $this->endTag = self::EndTagTextarea; break;
case __CLASS__.'::setInput' : $this->endTag = self::EndTagInput; break;
case __CLASS__.'::setSelect' : $this->endTag = self::EndTagSelectInside; break;
case __CLASS__.'::setOption' : $this->endTag = self::EndTagOption; break;
}
return $this->endTag;
}

public function sendForm($submit){
foreach($this->form[$this->nameForm] as $k=>$elem){
if(!is_array($elem)){
if(strpos($elem, 'type="submit"') !== false){
$t = preg_match('#name="(.*)"#uUs', $elem, $s);
if(isset($_REQUEST[$submit])){
return $this->validate();
}
}
}
}
}

}


использование
/**
$_SESSION['secret'] = 123;

$f = new HTMLForm;

$f->open('aut','','POST');

$login = isset($_POST['my_login']) ? htmlspecialchars($_POST['my_login']) : '';
$email = isset($_POST['email']) ? htmlspecialchars($_POST['email']) : '';
$capcha = isset($_POST['capcha']) ? htmlspecialchars($_POST['capcha']) : '';

$f->setInput('my_login')
->setAttr('type|text')
->setAttr('value |'.$login)
->setAttr('placeholder|Введите логин')
->setRules('notempty|regexp[#[a-z0-9\-]{3,10}#i]')
->setErrorText('Логин может содержать от 3 до 10 символов латинского алфавита, цифр, дефиса')
->addInput();

$f->setInput('email')
->setAttr('type|text')
->setAttr('value|'.$email)
->setAttr('placeholder|Введите email')
->setRules('notempty|email')
->setErrorText('Введён не корректный email')
->addInput();

$f->setInput('my_password')
->setAttr('type|password')
->setAttr('placeholder|Введите пароль')
->setRules('notempty|length[4,16]')
->setErrorText('Пароль должен содержать от 4 до 16 символов')
->addInput();

$f->setInput('my_password2')
->setAttr('type|password')
->setAttr('placeholder|Подтвердите пароль')
->setRules('confirm[my_password]')
->addInput();

$f->setInput('capcha')
->setAttr('type|text')
->setAttr('value|'.$capcha)
->setRules('code[secret]')
->addInput();

$f->setInput('send')
->setAttr('type|submit')
->setAttr('value|Отправить')
->addInput();


$form = $f->close();
//echo '
<pre>' . print_r($form, 1);

if(!$f->sendForm('send')){
$errors = $f->getErrors();
//echo '
<pre>' . print_r($errors, 1) . '</pre>';
}
else{
$data = $f->getData();
echo '
<pre>' . print_r($data, 1) . '</pre>';
}
?>


<?=$form['begin'];?>
<?=$form['my_login'];?> <?=isset($errors['my_login']) ? $errors['my_login'] : null;?>
<br />
<?=$form['email'];?> <?=isset($errors['email']) ? $errors['email'] : null;?><br />
<?=$form['my_password'];?> <?=isset($errors['my_password']) ? $errors['my_password'] : null;?><br />
<?=$form['my_password2'];?> <?=isset($errors['my_password2']) ? $errors['my_password2'] : null;?><br />
<?=$form['capcha'];?> <?=isset($errors['capcha']) ? $errors['capcha'] : null;?><br/>
<?=$form['send'];?><br />
<?=$form['end'];?>

*/

?>




1. Дома более свежий код, т.к. в ходе эксплуатяции выявлены недостатки - в том числе addRules() обязателен для любого поля - для заглушки trim
2. Группы чекбоксов и радиокнопок не рисует - всё руки не доходят дописать

а так вполне сокращает работу при работе с формой и написанию кода по валидации.

отдаю за даром - можно посмотреть что как реализовано

валидатор с точки зрения ооп - говно. т.к. на каждую валидацию нужно бы по классу


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25988
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 22 дня
Карма: 725

Не курю:
1 год, 2 месяца, 8 дней


ой, там использование с комментами не читабельно

вот

использование
$_SESSION['secret'] = 123;

$f = new HTMLForm;

$f->open('aut','','POST');

$login = isset($_POST['my_login']) ? htmlspecialchars($_POST['my_login']) : '';
$email = isset($_POST['email']) ? htmlspecialchars($_POST['email']) : '';
$capcha = isset($_POST['capcha']) ? htmlspecialchars($_POST['capcha']) : '';

$f->setInput('my_login')
->
setAttr('type|text')
->
setAttr('value |'.$login)
->
setAttr('placeholder|Введите логин')
->
setRules('notempty|regexp[#[a-z0-9\-]{3,10}#i]')
->
setErrorText('Логин может содержать от 3 до 10 символов латинского алфавита, цифр, дефиса')
->
addInput();

$f->setInput('email')
->
setAttr('type|text')
->
setAttr('value|'.$email)
->
setAttr('placeholder|Введите email')
->
setRules('notempty|email')
->
setErrorText('Введён не корректный email')
->
addInput();

$f->setInput('my_password')
->
setAttr('type|password')
->
setAttr('placeholder|Введите пароль')
->
setRules('notempty|length[4,16]')
->
setErrorText('Пароль должен содержать от 4 до 16 символов')
->
addInput();

$f->setInput('my_password2')
->
setAttr('type|password')
->
setAttr('placeholder|Подтвердите пароль')
->
setRules('confirm[my_password]')
->
addInput();

$f->setInput('capcha')
->
setAttr('type|text')
->
setAttr('value|'.$capcha)
->
setRules('code[secret]')
->
addInput();

$f->setInput('send')
->
setAttr('type|submit')
->
setAttr('value|Отправить')
->
addInput();


$form = $f->close();
//echo '<pre>' . print_r($form, 1);

if(!$f->sendForm('send')){
$errors = $f->getErrors();
//echo '<pre>' . print_r($errors, 1) . '</pre>';
}
else{
$data = $f->getData();
echo '<pre>' . print_r($data, 1) . '</pre>';
}
?>


<?=
$form['begin'];?>
<?=
$form['my_login'];?> <?=isset($errors['my_login']) ? $errors['my_login'] : null;?><br />
<?=$form['email'];?> <?=isset($errors['email']) ? $errors['email'] : null;?><br />
<?=$form['my_password'];?> <?=isset($errors['my_password']) ? $errors['my_password'] : null;?><br />
<?=$form['my_password2'];?> <?=isset($errors['my_password2']) ? $errors['my_password2'] : null;?><br />
<?=$form['capcha'];?> <?=isset($errors['capcha']) ? $errors['capcha'] : null;?><br/>
<?=$form['send'];?><br />
<?=$form['end'];?>


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 3 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 12 дней


Валидатор мне пока не нужен, это отдельная тема. Тут имеется ввиду валидация аттрибутов и событий. Допустим события onPokeFinger не существует, аттрибут width не применим к input, а значением аттрибута size не может быть строка, и так далее.

Сама реализация, как у тебя, мне не подходит. Мне нужна возможность получить тег как объектом, так и в виде HTML. Причем в любой момент.

Но спасиб, поковыряю, мож чего найдется интересного. smile.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 3 дня
Карма: 40




Овер-инженериг чистой воды, как и все генераторы форм. Бессмысленно стоить верстку с помощью php объектов, лучше это делать с помощью обычного html-кода в шаблонах. Это и гибче и универсальние, при прямых руках конечно.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Аццкая хрень
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5475
Пользователь №: 32538
На форуме: 4 года, 6 месяцев, 10 дней
Карма: 49




chee
овер-инжинеринг - это всегда интересно!


--------------------
Правда тоже ложь, но с иным углом.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 3 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 12 дней


Цитата (chee @ 9.06.2016 - 18:27)
Овер-инженериг чистой воды, как и все генераторы форм. Бессмысленно стоить верстку с помощью php объектов, лучше это делать с помощью обычного html-кода в шаблонах. Это и гибче и универсальние, при прямых руках конечно.

Полностью с тобой согласен. Потому и нет у меня сих пор такой заготовки в загашнике. Но это фреймворк, и позиционируется, как учебный. А значит должно быть. smile.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса