[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: На сколько правильньно я мыслю?
McLotos
Доброго времени суток! Хотелось бы узнать на сколько адекватно и логично то что я делаю
Для начала опишу структуру проекта:
1. Имеются файлы типа Index.php, admins.php, news.php и т.д. (т.е. колличество файлов равно колличеству существующих локаций, привычка ещё на html так когда-то писал)
2. К каждому php файлу имеется свой tpl файл с таким-же названием.
3. Все *.php файлы (которые отвечают за содержимое локации) ничего в себе не содержат кроме
<?session_start();
if (!session_is_registered("id")) header("location:/");?>
<?
require_once $_SERVER['DOCUMENT_ROOT']."/system/Includes/global.inc.php";?>

Есть несколько файлов, которые лежат в system/core/ и отвечают собственно за работоспособность проекта.
Например:
1. файл queries.php содержит в себе все запросы
2. functions.php - все существующие в проекте самописные функции
3. constants.php - название говорит само за себя =)
4. parameters.php - мой самый любимый файл. Почему самый любимый? Потому-что открыв только его я могу изменить любую часть проекта и для этого не нужно будет открывать другие файлы и исправлять код там.
1. Этот файл решает на какую страницу можно заходить, на какую нельзя, если доступ разрешён он проверяет на сколько он разрешён, в зависимости от ситуации вытягивает нужное меню и нужный контент, он отслеживает состояние шаблонов, т.е. если шаблон вдруг повреждён или потерян, то вместо него подставляется другой незаметно для пользователя и без выдачи каких-либо ошибок. Плюс через него-же можно настроить логику компановки шаблона на текущей страницы, ну к примеру не всегда можно использовать связку Header.tpl+{Location name}.tpl+Footer.tpl, вдруг дизайнеру взбредёт изобрести свой header для каждой страницы. А вообще планируется то файл parameters.php будет контролировать ещё и контент всех страниц. Т.е. во все tpl будет просто добавлено <?=$content?>() (да простит меня twin за короткие теги), а файл параметров будет уже решать что это значит. =)
Ну в общем много всяких тонкостей.
Вот кстати сам код хвалёного parameters.php
На растерзание критикам. Особенно хотелось бы узнать мнение twin
Мне просто интересно узнать мнение знатоков по каждому пункту из вышесказанного, и может даже получить в сторону этого файла здоровую адекватную критику.
Жду отзывов. =)
<?session_start();?>
<?
if ( stristr($_SERVER['HTTP_USER_AGENT'], 'Chrome') ) {$brows='1';}
else{$brows = '0';}
if ($brows !== '1')
{require_once $_SERVER['DOCUMENT_ROOT']."/system/error/browsers.php";}
elseif ($brows == '1')
{require_once $_SERVER['DOCUMENT_ROOT']."/system/Includes/global.inc.php"; dbconnect();
require_once $_SERVER['DOCUMENT_ROOT']."/system/core/Template.php";
if ($_SESSION['lang'] == "eng"){$langs=$_SERVER['DOCUMENT_ROOT']."/system/langs/acep.en.lang.php";}
elseif ($_SESSION['lang'] == "rus") {$langs=$_SERVER['DOCUMENT_ROOT']."/system/langs/acep.ru.lang.php";}
elseif ($_SESSION['lang'] == "kaz") {$langs=$_SERVER['DOCUMENT_ROOT']."/system/langs/acep.kz.lang.php";}
else {$langs = $_SERVER['DOCUMENT_ROOT']."/system/langs/acep.alter.lang.php";}
require $langs;
$loc = mysql_query($location);
$a = mysql_fetch_array($loc);
$currentlocid = $a['ID'];
$currentlocname = $a['Name'];
if (!empty($_SESSION['id']))
{
$b = mysql_query($checkgroup);
$c = mysql_fetch_array($b);
$group = $c['ID'];
$groupname = $c['Name'];
$constr = "Select Value From acep_Core Where Category='Menu' && Parameter1='{$currentlocid}' && Parameter2='{$_SESSION['access']}'";
$res = mysql_query($constr);
$myr = mysql_fetch_array($res);
$menu = $myr['Value'];
if (!empty ($menu)){
if ($_SESSION['skin']!== '0'){
$findskin = mysql_query($skin);
$arrskin = mysql_fetch_array($findskin);
$userskin = $arrskin['Name'];
}
$msg = $lang['text.hello']."<br>";
//подстраховка на случай, если скин будет повреждён.\
if ($currentlocid!=="3"){
if (file_exists($headtpl))
{include_once $headtpl;
print Template::evaluate($menu,$lang);}
else {$err = $lang['text.headskinerror'];
include_once $defheadtpl;
print Template::evaluate($menu,$lang);}
if (file_exists($path))
{include_once $path;}
else {$err = $lang['text.locskinerror'];
include_once $defpath;}
if (file_exists($foottpl))
{include_once $foottpl;}
else {$err = $lang['text.footskinerror'];
include_once $deffoottpl;}
echo $err;}
elseif ($currentlocid=="3")
{include_once $alterhead;
print Template::evaluate($menu,$lang);
include_once $path;}}
elseif(empty($menu)){ $msg = $lang['text.accesserror']; echo $msg;}}
else{$userskin="default";
include_once $_SERVER['DOCUMENT_ROOT']."/system/core/Login.php";
}
;}?>

Для более глубокого понимания, вот образец значения некоторых переменных
$foottpl = $_SERVER['DOCUMENT_ROOT']."/templates/{$userskin}/footer.tpl";
$path = $_SERVER['DOCUMENT_ROOT']."/templates/{$userskin}/{$currentlocname}.tpl";
$deffoottpl = $_SERVER['DOCUMENT_ROOT']."/templates/default/footer.tpl";



Спустя 24 минуты, 58 секунд (5.10.2011 - 08:20) Renden написал(а):
McLotos
ИМХО это сугубо мои мысли\замечания, можешь принять к сведению можешь проигнорировать wink.gif
1) Это глупо, достаточно 1 файла index.php остальное в него подключать модулями. Единственное админку многие делают отдельно.
2) Нах?)) А если шаблоны нужны будут одинаковыми для 2 страниц, смысл создавать 2 одинаковых шаблона? Я считаю что должен быть шаблон по умолчанию, так сказать который выоводит все в CONTENT, и возможность создавать шаблоны для конкретной страницы(модуля) если вдруг приспичит.

По поводу файлов в system/core/ это твое дело как их размещать как называть.. но ИМХО в данном случае достаточно бы 2 файлов function.php и config.php smile.gif

По поводу кода скажу что оформление по моему мнению плохое, нечитаемо..

Спустя 31 минута, 28 секунд (5.10.2011 - 08:51) McLotos написал(а):
Я просто не могу сделать пока по-другому, поэтому такое колличество файлов.
Просто у меня все ссылки и подключение всех необходимых файлов подготавливаются по результату запроса из БД, допустим юзер находится на странице новостей, в таком случае подаётся запрос на подключение нужного файла по id локации в БД.
Хотя, если например попробовать не указывать в БД адрес физического файла, а только название локации и ID, можно будет попробовать

Спустя 14 минут, 48 секунд (5.10.2011 - 09:06) Renden написал(а):
McLotos
Ну допустим что мешает даже примерно такой простецкий вариант использовать:
index.php

$page = $_GET['page'] ? trim($_GET['page']) : 'news';
$query = mysql_query("SELECT * FROM tbl WHERE page_name='".mysql_real_escape_string($page)."'");
$row = mysql_fetch_assoc($query);
if (file_exists('modules/'.$row['file'])
include ('modules/'.$row['file']);

в таком случае по умолчанию подинклюдит тебе новости, если укажешь допустим index.php?page=contacts то будет те другая страница.

А вообще почитай курсы от ирбис тим..

Спустя 1 минута, 44 секунды (5.10.2011 - 09:08) TranceIT написал(а):
Посмотри как просто и красиво на ирбисе сделано переключение страниц:

/**
* The switch of modules
* Переключатель страниц
*/

switch($GET['page'])
{

case 'main':
include IRB_ROOT .'admin/main/router.php';
break;

case 'second':
include IRB_ROOT .'admin/second/router.php';
break;

case 'meta':
include IRB_ROOT .'admin/meta/router.php';
break;

case 'exit':
include IRB_ROOT .'admin/sequrity/exit.php';
break;

default:
include IRB_ROOT .'admin/main/router.php';
break;
}

Спустя 1 минута, 55 секунд (5.10.2011 - 09:09) Renden написал(а):
TranceIT
Помоему красивее держать страницы в базе а не простыней switch case smile.gif

Спустя 7 минут, 3 секунды (5.10.2011 - 09:16) TranceIT написал(а):
Renden
Я в зависимости от ситуации использую оба варианта. Если это допустим сайт визитка, в котором четко определены все разделы, то лучшим считаю вариант ирбиса. Если это интернет магазин, где категории товаров постоянно меняются, то только базы.

Спустя 5 минут, 10 секунд (5.10.2011 - 09:22) Renden написал(а):
TranceIT
Да безразницы сайт визитка это или нет, наша задача свести к минимуму затраты своего времени в дальнейшем, написал 1 раз, и копипастишь в разные проэкты. Выгода базы в том что расширить страницы, удалить, добавить можно будет в любой момент без заглядывания в код. Думаю на любом сайте может в любой момент может потребоваться новая страница smile.gif

Спустя 2 минуты, 30 секунд (5.10.2011 - 09:24) redreem написал(а):
я вот год точу свой двиг и уже раза 4 его практически с нуля переписал по причине того, что только тогда, когда сталкиваешься с реальным проектом - понимаешь - насколько удобно или нет, быстро или медленно пишется сайт на двиге. поэтому пробуйте... не бойтесь выкидывать нахрен всю "гениальную" структуру и переписывать заного. в результате это сэкономит кучу времени и нервов в дальнейшем.

Спустя 1 час, 22 минуты, 53 секунды (5.10.2011 - 10:47) McLotos написал(а):
Цитата
Ну допустим что мешает даже примерно такой простецкий вариант использовать:
index.php

А мне почему-то кажется что работать с реальными файлами проще.

Цитата
не бойтесь выкидывать нахрен всю "гениальную" структуру и переписывать заного

=)
Я пока этот проект пишу, сотню раз переписывал логику, многие модули уже заездил до дыр, раз 10 всё к чертям удалял и писал всё с нуля.

Конкретный вынос мозга! =)
Я когда его начал писать о php только слышал =)
А теперь вот сижу и кайфую. Как в матрице, подключился, отключился с осознанием того что выучил кунг-фу =)

Спустя 43 минуты, 50 секунд (5.10.2011 - 11:31) caballero написал(а):
Цитата
А мне почему-то кажется что работать с реальными файлами проще.


Разумеется проще и логичнее.

Есть два основных варианта построения - одни файл index.php
на который переправляются запросы а он инклудит остальные модули. И разные страницы по модулям котрые инклудят общие части типа загаловка. Если вы новичок - однозначно второй вариант - меньше путатся будете. Так что структурв у вас нормальная - меньше слушайте умников.
А вот с шаблонами вы напрасно связались.

PHP сам по себе уже шаблонизатор - он так сделан изначально и поэтому популярен.

Раз у вас бизнес логика вынесена в функции и запросы так на фига какие то tpl файлы?
Берете файл news.php к примеру и формируете HTML как обычно. Раз у вас логика уже отделена то это будет по сути тот же шаблон один к одному только без всяких прослоек и лишних приседаний.

Спустя 5 минут, 34 секунды (5.10.2011 - 11:36) McLotos написал(а):
Цитата
на фига какие то tpl файлы

Тут всё банально =)
Я занимаюсь только функциональной частью проекта и его жизнеспособностью, а в дизайн мне лезьт просто лень, поэтому у меня есть дизайнер, который ничего не знает о php, и я решил что будет проще нам обоим, если он будет заниматься только шаблонами и при этом не будет иметь доступа к php коду, а я не буду ковыряться во всех этих div и т.д. =)

Спустя 12 минут, 29 секунд (5.10.2011 - 11:49) caballero написал(а):
Цитата
поэтому у меня есть дизайнер, который ничего не знает о php, и я решил что будет проще нам обоим,


Не будет проще - проверено многократно на опыте. Все равно шаблон не будет состоять из одного HTML. В шаблоны все равно надо вставлять скриплеты с вашими данными из PHP. какая разница будет это переменная или if else на PHP или на каком то птичьем языке. Но зато надо будет один файл на страницу а не два.
Чем поменают дизайнеру пара инклудов сверху?

Спустя 18 минут, 7 секунд (5.10.2011 - 12:07) McLotos написал(а):
А контент, который нужно отображать в определённом диве?

Спустя 11 минут, 17 секунд (5.10.2011 - 12:18) Renden написал(а):
caballero
Цитата
Но зато надо будет один файл на страницу а не два.Чем поменают дизайнеру пара инклудов сверху?

И что плохого если tpl несколько, даже например удобнее открыть news.tpl и отредактировать там то что отвечает только за новости, а допустим news_comments.tpl отвечает за коментарии к новостям, какой смысл все лепить в 1 файл? А зачем в шаблоне include, нужно все-же страться отделять логику от представления.

Спустя 7 минут, 48 секунд (5.10.2011 - 12:26) McLotos написал(а):
Вообще какбы да, я и пришёл к выводу что нужны шаблоны только из-за нежелания искать php среди бесконечных <div>, <talbe> и т.д.

Спустя 33 минуты, 22 секунды (5.10.2011 - 12:59) caballero написал(а):
Цитата
А контент, который нужно отображать в определённом диве?


а в чем проблемма?


Спустя 5 минут, 22 секунды (5.10.2011 - 13:05) caballero написал(а):
еще раз

нет никакого смысла заменять скриплеты PHP на какой то птичий язык
хотите логику и дизай в разные файлы - не проблемма
зачем для этого какаято прослойка нужна
в чем преимущество переменной в фигурных скобках перед переменной в треугольных?

Спустя 10 минут, 40 секунд (5.10.2011 - 13:16) Renden написал(а):
caballero
имхо
<div class="bla-vla">
<div
class="bla"><?php echo $username;?></div>
<div
class="bla"><?php echo $email;?></div>
</div>

vs
<div class="bla-vla">
<div
class="bla">{username}</div>
<div
class="bla"><{email}</div>
</div>

ИМХО 2 вариант проще для юзера ;)

Спустя 22 минуты, 51 секунда (5.10.2011 - 13:38) caballero написал(а):
ничем не проще
особенно если писать не php echo a просто =
а теперь подумайте как проще для разработчика -
использовать язык на котором делаешь сайт или прикручивать дополнительную тормозящую прослойку да еще и перекладывать переменные с одной формы в другую

сам подход использования помим двух языков еще какой то третий псевдоязык вынуддающий парсить файл еще раз уже сомнителен

Спустя 37 минут, 53 секунды (5.10.2011 - 14:16) bodja написал(а):
Renden

Хорошо,теперь представим,что у Вас есть тот же блок с коментами,
теперь нужно что бы у каждого блока была кнопочка "цитировать" у гостей +
кнопочка "редактировать" у автора поста + кнопочки "удалить" ,"банить" у админа.
Покажите как вы это будете разруливать на шаблоне,
через display:none ? biggrin.gif

Спустя 2 минуты, 49 секунд (5.10.2011 - 14:19) redreem написал(а):
bodja да без проблем простейшим шаблонизатором+делением тплок сложных модулей на несколько тплок разруливается.

Спустя 29 минут, 59 секунд (5.10.2011 - 14:49) imbalance_hero написал(а):
Renden
Зная МИНИМУМ php, мне проще увидеть <?php echo , чем {} , потому что если я вижу '<?php echo' , то я знаю, что это вывод переменной. А если фигурные скобки, то внутри кода они не бросаются в глаза!!!

Спустя 24 минуты, 6 секунд (5.10.2011 - 15:13) caballero написал(а):
Цитата
да без проблем простейшим шаблонизатором+делением тплок сложных модулей на несколько тплок разруливается.


то есть продублируем кусок дизайна несколько раз для разных кнопок?

Спустя 4 минуты, 22 секунды (5.10.2011 - 15:18) redreem написал(а):
вообще надо плясать не от тплок, а от теоретической структуры. если она разработана грамотно, то и код в результате будет выстраиваться прозрачным и масштабируемым.

Спустя 6 минут, 25 секунд (5.10.2011 - 15:24) bodja написал(а):
redreem

а не проще ли написать одну функцию или метод,
раскроить один раз, а не несколько и не подключать шаблонизатор?

	private function post($data,$name,$avatar,$msg,$i,$b) {
$h='<tr class="post1" >
<td class="post1_1">'
.$data.'</td>
<td class="post1_2"><b>#'
.($i+1).'</b>  '.$b.'</td>
</tr>
<tr class="post2">
<td class="post2_1">
<div id="np'
.$i.'" style="padding:5px 0 5px 0;">'.$name.'</div>
<div><img src="./avatar/'
.$avatar.'" style="height:128px;width:128px;"></div>
</td>
<td class="post2_2" id="p'
.$i.'">'.$msg.'</td>
</tr>
<tr class="post3">
<td></td>
<td></td>
</tr>'
;
return $h;
}


если хотите дать дополнительные инструменты дизайнеру так дайте ему аля class="post1"
будет вам и другой цвет и шрифты и фоновые изображения и размеры.

Картинок в коде тоже можно избежать,к примеру

define ('IMG_EDIT','<img src="./images/edit.png" style="cursor:pointer;"/>')
define ('IMG_COMMENT','<img src="./images/comment.png" style="cursor:pointer;"/>')
define ('IMG_DELETE','<img src="./images/delete.png" style="cursor:pointer;"/>')


потом в коде $b=IMG_EDIT.IMG_COMMENT.IMG_DELETE

пожалуйста теперь меняйте себе кнопочки на какие хотите

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

Спустя 4 минуты, 7 секунд (5.10.2011 - 15:28) redreem написал(а):
мы о чем говорим? о прикручивании костылей к существующим движкам или о своем двиге под собственные нужды? если о последнем, то какждый делает как ему удобно. я о том, что можно как угодно делать, просто когда двиг сталкивается с реальным проектом, оказывается что лучше было делать подругому.

Спустя 1 минута, 34 секунды (5.10.2011 - 15:30) caballero написал(а):
Цитата
пожалуйста теперь меняйте себе кнопочки на какие хотите


Речь щла не об изменении названия кнопок а о том что в зависимости от контента она должна появится или нет


Цитата
типа посты ,сообщения,блоки новостей и т.д. приходиться самому допиливать под понравившийся шаблон


Речь идет о шаблонизаторах а не о шаблонах как заготовоках дизайна

Спустя 30 минут, 5 секунд (5.10.2011 - 16:00) bodja написал(а):
Цитата
Речь щла не об изменении названия кнопок а о том что в зависимости от контента она должна появится или нет

Ну так читайте внимательно,там есть возможность и того и другого.

Цитата
Речь идет о шаблонизаторах а не о шаблонах как заготовоках дизайна

Я прекрасно понял о чем речь идет,спасибо.

Цитата
мы о чем говорим? о прикручивании костылей к существующим движкам или о своем двиге под собственные нужды


Да я незнаю,у меня вообще нет движка biggrin.gif
Вообще спор начался с того,как и где хранить хтмл и каким боком его можно лучше вывести,наверное разговор ушел сомвем не в ту степь.

Спустя 3 минуты, 50 секунд (5.10.2011 - 16:04) caballero написал(а):
Вообще спор начался с того,как и где хранить хтмл и каким боком его можно лучше вывести,наверное разговор ушел сомвем не в ту степь.

Вопрос в том что ТС не хочет найти неприятностей на задницу (как следует с названия топика)

использование всякого рода шаблонизаторов вне синтаксиса PHP и HTML
верный способ это сделать.

Спустя 1 час, 56 минут, 20 секунд (5.10.2011 - 18:00) imbalance_hero написал(а):
McLotos
Стили вообще смотреть нереально. Сокращенность <? просто плохо, знаешь но используешь... если сравнивать с животными, ведёшь себя как барашек, я бы назвал и баран, но не знаю твоей грамотности и адекватности, потому что в связи с её отсутсвием мог бы и на барана обидеться :)
array там, где скорее всего надо assoc.
Цифру 1 писать как ТЕКСТОВУЮ...

Привет индусам:
if ($_SESSION['lang'] == "eng"){$langs=$_SERVER['DOCUMENT_ROOT']."/system/langs/acep.en.lang.php";}
elseif ($_SESSION['lang'] == "rus") {$langs=$_SERVER['DOCUMENT_ROOT']."/system/langs/acep.ru.lang.php";}
elseif ($_SESSION['lang'] == "kaz") {$langs=$_SERVER['DOCUMENT_ROOT']."/system/langs/acep.kz.lang.php";}


вуаля:
$langs=$_SERVER['DOCUMENT_ROOT'].'/system/langs/acep.'.$_SESSION['lang'].'.lang.php';


И вообще, 80 или даже 90% этого содержания можно легко перенести в index.php, потому что как бы он выполняет функцию единого входа, поэтому зачем его инклюдить на каждой страницы, когда достаточно из индекса инклюдить каждую страницу и не будет перенасыщения однотипных команд.

Спустя 57 минут, 41 секунда (5.10.2011 - 18:58) redreem написал(а):
1. шаблонизация - это естественный процесс, который развивается, когда людям надоело писать на ассемблере (да и ассемблер, собственно, - это уже по сути шаблонизатор машинного кода [кто захочет крикнуть что это всеголишь мнемоническо отображение машинных команд - идите в баню]).
2. в этом естественном процессе, естесвенно (чрезмерные увлечения свойственны человеческой натуре), порой, некоторые заходят достаточно далеко, путем создания целых мнемоязыков-связок между html и php.
3. изучив и попробовав все эти излишки, думается, - каждый сам решит что ему удобно и целесообразно.
4. я знаю верстальщиков, которые плюются и бесятся, когда им приходится верстать без шаблонизатора, а конструкциями <?php ... ?>. Это уже дефакто. И мнение программиста тут не единственное и тем более не единственно "самое важное".

Спустя 3 часа, 41 минута, 11 секунд (5.10.2011 - 22:39) imbalance_hero написал(а):
redreem
Шаблонов МИЛЛИОНЫ, а язык программирования 1.
Если пишешь:
<?php if($var == 10) {?> То абсолютно все верстальщики мира понимают, что ты имеешь ввиду тут, а шаблонные - разбиты по группам.

Спустя 17 минут, 56 секунд (5.10.2011 - 22:57) redreem написал(а):
{} уже тоже повсеместно торчит.

Спустя 7 часов, 50 минут, 47 секунд (6.10.2011 - 06:47) McLotos написал(а):
Кстати о шиблонах и контенте. Я нашёл оптимальный вариант, я сделал две админки, одну для себя, вторую для дизайнера, у него там есть окошки, в которые он запивает контент вместе со своими стилистическими тегами, а в tpl просто выводятся переменные, которые там уже прописаны заранее, в результате дизайнер не лезет в код, и я могу спать спокойно =)

Спустя 31 минута, 7 секунд (6.10.2011 - 07:19) McLotos написал(а):
Цитата
$langs=$_SERVER['DOCUMENT_ROOT'].'/system/langs/acep.'.$_SESSION['lang'].'.lang.php';

Это был первоначальный вариант, но что-то мне не очень понравилось когда сессионная переменная оказалась пустой и скрипт захлебнулся вместо того чтобы подключить alter.lang
А на счет
Цитата
Привет индусам:
могу сказать следующее, это не будет именно в таком варианте, так как языков много (больше 10и), то скорее всего конструкция будет работать через Case =)
И кстати, вы наверное не заметили что в сессии язык хранится в формате RUS/ENG а в именах фалов указаны RU/EN. Просто, если сейчас переименовывать файлы, нужно выкачивать все с серва (лень), или править в БД, а для этого исправлять все формы регистрации, и ещё половину скриптов проекта
Хотя такой вариант обдумывался, и будет ещё оптимизироваться дальше, может я к нему и вернусь.
Цитата
плюются и бесятся, когда им приходится верстать без шаблонизатора,

Шаблонизатор не обязателен, можно просто написать функцию, я просто рассуждаю стоит ли или оставить как еть, ведь функция это лишний запрос, значит дополнительное время.
Хотя с другой стороны очень хочется. Я не хочу однажды проснуться от звонка с фразой типа "У нас на главной странице написана какая-то чушь типа Warning: и ещё что-то там"
=)

Спустя 9 часов, 50 минут, 33 секунды (6.10.2011 - 17:09) imbalance_hero написал(а):
McLotos
Мне лень, ну я лучше копи-паст сделаю на 10 языков, чем 1 условие и одну строчку... принципы, лень... всё вместе = быдлокод.


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

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