Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: В этом классе можно нарисовать таблицу?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Ссылка в теме
deblogger
Отправлено: 01 Ноября, 2013 - 20:10:28
Post Id


Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)

[+]


Слегка заколодило с простым классом генерации хтмля, решил пойти посмотреть что люди пишут. Пишут разное, в основном голимое г. Оно и понятно. Построить DOM одной нодой не получится, и даже с массивом. Цеплять весь "домный" класс слишком жирно, так что поиск привел к внешне по кодам вменяемому варианту, а именно сюда

http://www[dot]piprime[dot]fr/1472/effic[dot][dot][dot]mplating-system/

Применительно к кодам использования класса я сразу ничего не понял и никакой красоты не заметил. Такая же чехарда как у всех. Но сам класс выглядел симпатично.

Так вот, я попытался нарисовать таблицу и ничего не вышло. Он не закрывает ее, зато закрывает то, чего не надо, потому что ориентирован на хмльные правила, а я ориентирован на хтмл5. Это можно исправить, но таблицу закрывать надо.

Таблица рисовалась конечо в цикле. Коды я давно стер, примерно так


PHP:
скопировать код в буфер обмена
  1. $tg = new $XmlTag;
  2.  
  3. $res = $link->query($q);
  4.  
  5. $tg->table()->caption('Проверка')->tr();
  6.  
  7. while($row = $res->fetch_field()){
  8.   $tg->td($row->name);
  9. }
  10.  
  11.  
  12. while($row = $res->fetch_row() {
  13.  $tg->tr();
  14.  for($i=0; $i<$res->field_count; $i++) {
  15.     $tg->td($row[$i]);
  16.  }
  17. }
  18.  
  19.  


Таблица нарисовалась, я даже css-класс ей приделал, но в хтмле следующая за ней строчка истекала кровью. FF на это сообщил что table наверно не закрыт. И он не был закрыт.

В общем я добил свою шнягу, получилось два маленьких класса - один нода, второй ноды. Приходится устраивать между ним некий пинг-понг, поскольку это самое простое что можно сделать для имитации дерева.

Но остался вопрос - может я неправильно применял класс с урла выше.

(Отредактировано автором: 01 Ноября, 2013 - 20:12:24)

 
 Top
armancho7777777 Супермодератор
Отправлено: 01 Ноября, 2013 - 20:35:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




deblogger пишет:
Цеплять весь "домный" класс слишком жирно

Да что Вы говорите ))
И на чём же основывается, интересно, Ваше утверждение ?)

Я так понимаю, под
deblogger пишет:
"домный" класс

Вы подразумеваете пакет Document Object Model ?

(Отредактировано автором: 01 Ноября, 2013 - 20:38:38)

 
 Top
caballero
Отправлено: 01 Ноября, 2013 - 21:09:49
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Не очень понятно зачем для формирования простого текста, коим является XML или HTML нужные "домные" или еще какие "бездомные" классы .


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
deblogger
Отправлено: 02 Ноября, 2013 - 05:00:02
Post Id


Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)

[+]


Выкосил все что было написано, поскольку потребность самоочевидна.

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

Особое удовольствие доставляют атрибуты наличие которых достаточное основание для изменения вида элемента.

Нарисуйте мне вручную пример как вы воткнете по условию такие атрибуты как selected, disabled, checked.

CODE (html):
скопировать код в буфер обмена
  1. <input type = "'checkbox" name = "' . $name  .  '" value = "'. $value .'" checked = дальше что? фтыкать тройную логику с выходом на checked="checked" иначе '' ?>
  2.  


А еще надо disabled туда же.

(Отредактировано автором: 02 Ноября, 2013 - 05:26:05)

 
 Top
tato
Отправлено: 05 Ноября, 2013 - 09:40:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2.     function input( $type, $attributes )
  3.     {
  4.         $result = array();
  5.    
  6.         if( $attributes ) foreach ( $attributes as $attribute=>$value )
  7.         {
  8.             if( $value )
  9.             {
  10.                 $result[] = is_int( $attribute ) ? "$value=\"$value\""
  11.                                                  : "$attribute=\"$value\"";
  12.             }
  13.         }
  14.    
  15.         return sprintf( '<input type="%s" %s />', $type, implode( ' ', $result ) );
  16.     }
  17.  


Пример
PHP:
скопировать код в буфер обмена
  1.  
  2. echo input( 'checkbox', array( 'checked', 'id'=>'my_check', 'disabled'=>false ) );
  3.  
  4. // в результате: <input type="checkbox" checked="checked" id="my_check"/>
  5.  

(Добавление)
Если хотите HTML5:
PHP:
скопировать код в буфер обмена
  1.  
  2. // меняете это
  3. $result[] = "$value=\"$value\"";
  4. // на это
  5. $result[] = strtoupper( $value );
  6.  

(Отредактировано автором: 05 Ноября, 2013 - 09:40:59)



-----
просто ?: сложно
 
 Top
esterio
Отправлено: 05 Ноября, 2013 - 09:55:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




tato пишет:
Если хотите HTML5:

когда ето HTML5 нужно UPPERCASE?

deblogger
По сути, тоже самое что и в Yii CHtml, делает ровным счетем ничего, кроме стандартных оберток над HTML и тикаеться повсюду, для еще большей работы верстальщыка.

Вопрос: быть или не быть?
 
 Top
deblogger
Отправлено: 05 Ноября, 2013 - 13:59:11
Post Id


Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)

[+]


tato пишет:
Пример


PHP:
скопировать код в буфер обмена
  1. $elem('input')
  2.   ->type($type)
  3.   ->name($name)
  4.   ->value(1)
  5.   ->checked($checked)
  6.   ->disabled($disabled);
  7.  
  8.  


Когда вижу в аргументах функции array() и внутри нее еще один array() я думаю ну вещь серьезная. Оказывается эта вещь всего лишь хтмл-тег делает, причем специфический - конкретный input. Это сугубый перебор.

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

В двойные кавычки я не верю, с одинарными такая строка в хтмле будет представлять поле боя этой самой расчески с теми самыми вшами.
(Добавление)
Ну так вот, класс тега может засунуть себе хобот сами знаете куда. Функция add добавляет инстансь в узел элемента и можно вкладывать скольк хочешь. Цитату выше можно начать так:

PHP:
скопировать код в буфер обмена
  1. $elem('label')
  2.   ->_text_b($text)
  3.   ->title($text)
  4.         ->add('input')
  5.          -> // и далее по тексту


Как видите оно может только расти вглубь. Вширь не может, потому что одноименные элементы это массив и в DOM'е именно так. Теоретически можно давать всем элементам уникальные ID и отчасти так и сделано в комплементарном микро-классе - теги. Который записывает в себя тег под уникальным ID, в который можно записать теги. В этом классе свой _toString() который попросту инициирует _toString() тегов путем вызова join(get_object_vars()) или типа того.

Так вот, у автора класса в начале темы теги не копятся как таковые, но складируются в буфере уже как строка. Похоже именно по этой причине их нельзя разрывать - как это приходится делать в цикле. Сохраняя в коллекции тег живьем его можно найти и починить, в том числе всунуть ему еще тег и так далее. Что позволяет не придерживаться структуры хтмля, а свободно собирать инфо для хтмля сохраняя структуру в объекте теги.

Все равно получается корявенько, зато все маленькое, даже микро по сравнению с ДОМами и той жутью которую я навидался у фрейморков.
(Добавление)
А, да, вот это _text_b($text) - означает "атрибут" текст_впереди. Еще есть атрибут _text_a - текст_позади (before-after). Так сделано потому что текстовую ноду полностью выкашивает ссылка на инстансь дочернего тега будучи вставленной в него. Текст можно передать вторым аргументом _invoke($_tag, $_node) и если ничего не вставлять то он останется. Иначе приходится добавлять через атрибуты. Конечно через зарезервированные слова. Потому что инстансь класса это и есть "массив". То есть тег, текст и атрибуты в ней вперемешку. Что существенно все упрощает.
(Добавление)
Поскольку из цитаты применения и так все понятно, полагаю нет нужды постить сырец класса который я сам себе накалякал.

$elem = new Tag;

$elem('a', 'ссылка') // _invoke()
->href('www.example.com'); // _call()

или наоборот, я уже забыл.

(Отредактировано автором: 05 Ноября, 2013 - 14:26:13)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB