[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Самосоздающиеся скрипты
ApuktaChehov
Здравствуйте товарищи!

Есть тут такое дело, я постораюсь объяснить.

Предположим есть некая форма для заполнения информации о заказчиках в которую входят: ФИО, адре, телефон, почта и т.д.

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

Фактически работа программиста заканчивается на написании скриптов, которые сами создают и используют информацию, которую ввел пользователь.

Пример:
Я хочу что бы к информации о заказчике отнасились следующие данные:
ФИО, организация, адрес, телефон офиса, телефон мобильный, телефон домашний, почта, доп. информация.

Соответственно скрипт сам создается нужную таблицу в SQL, генерирует HTML код и т.д. Так же должна указываться дополнительная информация, такая как: длина каждого поля imput, макс. кол-во символов в input, будет это imput или select и т. д.

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



Спустя 20 минут, 31 секунда (31.08.2009 - 09:32) sergeiss написал(а):
Реализовать это можно. Но, по-моему, имеет смысл только при написании некой серьёзной CMS. Потому что если это именно серьёзная CMS, то на общем фоне реализация будет несложная. А иначе "овчинка выделки не стоит". Ну, только если для практики...

Спустя 4 минуты, 3 секунды (31.08.2009 - 09:36) ApuktaChehov написал(а):
В том то и дело, что не для практики.

Необходима гибкая система...

Но это альтернатива:

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

Это CMS - упраление предприятием.

Есть усложнаяющий момент...
Каждое поле должно иметь свой div. Этому слою присваевается положение на странице, а так же z-index. Настройка положения на странице управляет JavaScript и Ajax.

Спустя 16 минут, 35 секунд (31.08.2009 - 09:53) DenPHP написал(а):
так в чем проблема написать?
пользователь задаёт что надо. создается бд.
а формы генерируются...тоже не чего сложного нету.
ну вытянуло первый столбец, тип и создает ... не чего сложного но вот очень нудно.

Спустя 17 минут, 51 секунда (31.08.2009 - 10:11) glock18 написал(а):
Цитата
так в чем проблема написать?
пользователь задаёт что надо. создается бд.
а формы генерируются...тоже не чего сложного нету.
ну вытянуло первый столбец, тип и создает ... не чего сложного но вот очень нудно.

может сделаешь тогда? smile.gif

Спустя 5 минут, 29 секунд (31.08.2009 - 10:16) ApuktaChehov написал(а):
Все не так просто.

В последствии получается иерархия.

Самогенерирующийся код будет основываться на, опять же, самогенерирующимся коде.

Тут то и начнутся серьезные проблемы...

Я просто хотел узнать мнения экспертов по поводу этого дела.

Спустя 14 минут, 24 секунды (31.08.2009 - 10:31) glock18 написал(а):
Ну если мнение.

Все это не так сложно, если хорошо представлять чего ты хочешь получить.
И достаточно часто в таких задачах разработчик как раз не очень это представляет.

Это вполне разрешимо на самом деле. Тебе нужно описать поведение каждой сущности искомой формы - задать поведение для каждого возможного типа поля. Это можно и лучше делать классами. Один тип поля - один класс.

После этого ты получишь инструментарий для создания формы.

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

ЗЫ: эту задачу можно решить и без генерирования кода. несколько сложнее получится. ну или сгенерированный код сделать несколько более гибким. я описал выше достаточно простой, но далеко не самый лучший вариант реализации.

Спустя 6 минут, 7 секунд (31.08.2009 - 10:37) ApuktaChehov написал(а):
Я все понял.

Я собираюсь писать систему управления предприятием, т.е. собираюсь ее улучшать, так как уже существует рабочий вариант, но он ОЧЕНЬ сильно ограничен и так же плохо написан.

Работа не малая. Но мне не страшно biggrin.gif

Хочу пригласить вольных разработчиков для этого дела. Но позже. Для начала хочу начать и что то уже сделать, что бы было что показать, что обсудить.

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

Спустя 24 минуты, 42 секунды (31.08.2009 - 11:01) Michael написал(а):
Ты хочешь сделать то, что уже сделано в 1С Предприятии.
Справишься?
Сотни фирм о таком уровне интерфейса годами безнадежно мечтают.
Недостаточно просто создать поле ввода данных и соответствующую ему
ячейку в БД. Нужно данные еще и обрабатывать - и при вводе пользователем,
и при занесении и т.д. К тому же связи между данными в реальности не просты.

PS
Такое сделано не только конечно в 1С, но те системы управления ОЧЕНЬ дорогие...

Спустя 3 минуты (31.08.2009 - 11:04) Michael написал(а):
ApuktaChehov
Цитата
так как уже существует рабочий вариант, но он ОЧЕНЬ сильно ограничен и так же плохо написан.

Этот вариант что на PHP и MySQL написан?
И кем? Фирмой, человеком?

Спустя 3 минуты, 2 секунды (31.08.2009 - 11:08) ApuktaChehov написал(а):
Я все это понимаю. По этому хочу сделать опенсорс проэкт.

Я один? - нет, не справлюсь. Но начать могу, а там уже и интузиасты подключатся.

Мной написан. да на PHP и MySQL.

А сейчас я хочу совместить несколько технологий: PHP, PostrgreSQL, Ajax, JavaScript, CSS. В качестве платфнормы Apache на FreeBSD.

Спустя 13 минут, 21 секунда (31.08.2009 - 11:21) Michael написал(а):
Как программист АСУ искренне желаю тебе удачи.

Спустя 3 минуты, 39 секунд (31.08.2009 - 11:25) ApuktaChehov написал(а):
Спасибо большое!

Я ясно представляю себе как все это должно работать.
Сейчас я занимаюсь написанием ТЗ.

Позже зарегистрирую домен и открою сайт и форму. Приглашу туда всех кто заинтересован в этом деле.


Спустя 4 минуты, 9 секунд (31.08.2009 - 11:29) Michael написал(а):
Цитата
Сейчас я занимаюсь написанием ТЗ

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


Спустя 3 минуты, 56 секунд (31.08.2009 - 11:33) ApuktaChehov написал(а):
Поделюсь планами:

Ой, самое главное не сказал, это будет система управления полиграфическим предприятием.
Именно на это и ориентированная.

планирую писать в несколько этапов:

1.Управление контрагентами, материалами, продукцией.
2.Управление заказами
3.Разработка интерфейса.
4.Документация
5.Отчетность
6.Межпроизводственные связи

Это вкратце обовсем.

Спустя 1 час, 7 минут, 10 секунд (31.08.2009 - 12:40) Kerlyk написал(а):
Я бы с удовольствием поддержал и помог. Тема интересная. Широкий спектр задач - еще один плюс (огромная база для самосовершенствования в области web-программирования). Так что по любым вопросам в этот топик smile.gif

Спустя 11 минут, 22 секунды (31.08.2009 - 12:51) FatCat написал(а):
Цитата (ApuktaChehov @ 31.08.2009 - 10:12)
Соответственно скрипт сам создается нужную таблицу в SQL

ИМХО, тут ошибка.
Проектируются 2 таблицы: в одной создаются группы, в другой хранятся сопоставленные данные.
В первой группе будет информация о стандартном наборе данных. Если пользователь добавляет новое поле или удаляет имеющееся, создается новая группа с описанием нового набора полей. Сами же пользовательские данные хранятся во второй таблице с данными. Для вывода таблицы джойнятся.

Спустя 29 минут, 35 секунд (31.08.2009 - 13:21) ApuktaChehov написал(а):
Цитата (FatCat @ 31.08.2009 - 09:51)
ИМХО, тут ошибка.
Проектируются 2 таблицы: в одной создаются группы, в другой хранятся сопоставленные данные.
В первой группе будет информация о стандартном наборе данных. Если пользователь добавляет новое поле или удаляет имеющееся, создается новая группа с описанием нового набора полей. Сами же пользовательские данные хранятся во второй таблице с данными. Для вывода таблицы джойнятся.

Естественно. Я не стал расписывать все как есть...

Спасибо за уточнение wink.gif

Kerlyk я дам Вам знать, когда нчнется самое интересное wink.gif

Спустя 3 часа, 36 минут, 57 секунд (31.08.2009 - 16:58) FatCat написал(а):
Цитата (ApuktaChehov @ 31.08.2009 - 14:21)
Естественно.

Для меня не естественно. Иногда приходится динамически и таблицы создавать, и структуру менять.
Например, для движка этого форума писал мультидоменность. При старте админки проверяется, есть ли таблица мультидомена, и если нет, то создается; если нет полей соответствующего домена, то создаются поля:
Листинг
PHP
// +FatCat для мультидомена: проверяем, есть ли домен для логирования, и если нет - создаем:
            
$this_admin_id $mem['id'];
            
$domen str_replace("www.","",$_SERVER['HTTP_HOST']);
            
$domen explode("/",$domen);
            
$domen $domen[0];
            
$domen str_replace(".","_",$domen);
            
            
// Если вдруг нет таблицы, создаем:
            
$DB->query("CREATE TABLE IF NOT EXISTS ibf_member_domens (did mediumint(8) NOT NULL default '0', PRIMARY KEY  (did)) ENGINE=MyISAM DEFAULT CHARSET=cp1251;");
            
            
// Если создали, нужно и тервую запись. Например, себя:
            
$DB->query("SELECT * FROM ibf_member_domens LIMIT 0,1");
            if ( !
$DB->get_num_rows() )$DB->query("INSERT INTO ibf_member_domens ( did ) VALUES ('".$this_admin_id."')");
            
            
// Таблица наверняка есть, и в ней наверняка есть хотя бы одна запись.
            // А есть ли поле под текущий домен?
            
$DB->query("SELECT * FROM ibf_member_domens LIMIT 0,1");
            
$row $DB->fetch_row();
            if( !isSet(
$row[$domen]) )$DB->query("ALTER TABLE ibf_member_domens ADD ".$domen." MEDIUMINT( 10 ) DEFAULT '0' NOT NULL");
            
// Если не было поля, то теперь есть.
            
            //Проверяем, есть ли неохваченные заботой мемберы:
            
$DB->query("SELECT count(did) AS counted FROM ibf_member_domens");
            
$row $DB->fetch_row();
            
$count_loged intval($row['counted']);
            
$DB->query("SELECT count(id) AS counted FROM ibf_members");
            
$row $DB->fetch_row();
            
$count_total intval($row['counted']);
            
            if(
$count_total>$count_loged// Есть неохваченные заботой
            
{
                
// Поехали искать мемберов в таблице логирования:
                
$loged_members "";
                
$DB->query("SELECT did FROM ibf_member_domens");
                while ( 
$r $DB->fetch_row() )
                {
                    
$loged_members .= $r['did'].",";
                }
                
$loged_members .= "end";
                
$loged_members str_replace(",end","",$loged_members);
                
                
// Поехали добавлять в логирование всех неохваченных нашим вниманием:
                
$members_no_loged $DB->query("SELECT id FROM `ibf_members` WHERE id not in (".$loged_members.")");
                while ( 
$r $DB->fetch_row($members_no_loged) )
                {
                    
$DB->query("INSERT INTO ibf_member_domens ( did ) VALUES ('".$r['id']."')");
                }
            }
// -FatCat

rolleyes.gif


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.