Станислав Малкин
1410 сообщений
#11 лет назад
Цитата ("vovan_f"):
Оффтопик
Хммм... как связаны smarty и MVC?
За что любить его не знаю... Еслиб он или еще какой-нибудь шаблонизатор использовался как унифицированный шаблонизатор (еще например и для ASP , Perl, Java) то была бы сказка. В итоге имеем один шаблонизатор (smarty) написанный на языке другого "шаблонизатора" (PHP). А если добавить тенденцию некоторых индивидуумов писать в шаблонах {php} {/php}. А может кто-нибудь объяснить для чего этот смарти вообще создавался и чем хуже шаблонная система на голом php ? Ну ведь явно не для простоты? Уж точно не для быстродействия. А для чего ?


Что проще выглядит :

{$var} или <?php echo $var; ?>

Тут и кроется ответ "зачем". Для удобства и наглядности. Смарти легок в освоении и имеет ОДИН интерфейс, поэтому другому программисту не составит труда разобратся, что сделал человек до него. Шаблонизатор же пхп в шаблонах выглядит довольно паршиво и сидеть разгребать кучу "спагетти-кода" никому не интересно, я в этом уверен.

Те, кто суют {php}{/php} в Смарти - делают глупости. Мне за 4 года программирования на пхп и столько же работы с шаблонами смарти ни разу не пришлось писать что-то подобное, это, имхо, архаизм.

Насчет MVC и Smarty: View реализовывается через смарти, что есть вполне логичным. Что Вас смущает?
Тимофей Инчагов
92 сообщения
#11 лет назад
Хммм... как связаны smarty и MVC?
За что любить его не знаю... Еслиб он или еще какой-нибудь шаблонизатор использовался как унифицированный шаблонизатор (еще например и для ASP , Perl, Java) то была бы сказка. В итоге имеем один шаблонизатор (smarty) написанный на языке другого "шаблонизатора" (PHP). А если добавить тенденцию некоторых индивидуумов писать в шаблонах {php} {/php}. А может кто-нибудь объяснить для чего этот смарти вообще создавался и чем хуже шаблонная система на голом php ? Ну ведь явно не для простоты? Уж точно не для быстродействия. А для чего ?


MVC это разделение логики от представления. Раньше программисты использовали двух уровневую и трех уровневую систему организации получения и обработки данных. Трех уровневая система состояла из таких элементов как:
Ядро
Интерефейс
Представление

Ядро и Представления не могли общаться с друг другом т.к. говорили на разных языках а вот Интерфейс помогал им общаться так сказать. Таким образом достигался результат где программист мог создавать большие библиотеки (своего рода ядро программы) а затем с помощью интерфейса подсоединять их к сайту и обрабатывать как требуется для данного дизайна. Полуали более или менее унифицированную систему получения и обработки данных. Но проблема всеравно была, т.к. ПХП код всеравно должен был вставляться в HTML код, что очень мешало верстальщикам и дизайнерам. особенно это было ощутимо при разработке больших программ. так же возможность быстро сменить дизайн для библиотеки было тоже достаточно трудоемко!

И тогда на смену трехуровневой системы пришел Смарти. Он позволил без добавления в HTML код PHP кода вставлять нужные модули, причем если обнаруживались ошибки в программе было достаточно исправить ее ядро не трогая дизайн и html коды. Но у смарти есть большой недостаток, он реально грузит систему, т.к. ему приходится бегать по шаблону и искать нужные процедуры меняя их на данные полученные с ядра системы.

Что получаем, получаем ускорение разработки и более быстрый редизайн сайта, за счет скорости системы. Хотя говорят что в последнее время самарти стал пошустрее.
Тимофей Инчагов
92 сообщения
#11 лет назад
Давайте говорить на языке цифр, а не на уровне "я тут подумал, что будет медленно"


Я не подумал и не пришел, это логично как божий день. PHP это уже Интерпретатор, а когда к нему подсоединяют еще один Интерпретатор (в данном случаи Smarty) то работа системы удваивается так же и удваивается время на эту работу.
Тимофей Инчагов
92 сообщения
#11 лет назад
Не подумайте что я против смарти, я за 10 Руками.. просто хочу донести тот факт что он не всегда нужен, если это сайт из 6 - 10 страниц, то того не стоит что бы его использовать. Но если это интернет магазин либо портал, то без него лучше не начинать разработку.
Тимофей Инчагов
92 сообщения
#11 лет назад
У меня вот такой вопрос, интересно разработчики PHP создадут когда нибудь аналогию Смарти только на уровне интерпретатора PHP или они окончательно пришли к выводу что Смарти правит балом...
Имя Фамилия
79 сообщений
#11 лет назад
большенство сайтов создаются на Joomla

Фига се...
свой язык для реализации MVC.

еще большее ФИГА СЕ...
Давайте говорить на языке цифр, а не на уровне "я тут подумал, что будет медленно"

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

..ммм , а накой тут Regexы....увидел {{ считал имя переменной, пробежался по списку поступивших переменных есть - > Заменяем - нет error)/

то работа системы удваивается так же и удваивается время на эту работу.

Оо int(t)
t+=0
что быстрее?
Не подумайте что я против смарти, я за 10 Руками.. просто хочу донести тот факт что он не всегда нужен, если это сайт из 6 - 10 страниц, то того не стоит что бы его использовать. Но если это интернет магазин либо портал, то без него лучше не начинать разработку.

Сайт из 6-10 страниц, проще сверстать единожды, и не париться с цмской=)
А для магазина и портала, уже исходя из того - сколько вам заплатят.
У меня вот такой вопрос, интересно разработчики PHP создадут когда нибудь аналогию Смарти только на уровне интерпретатора PHP или они окончательно пришли к выводу что Смарти правит балом...

И как вы себе это представляете?=)))
Тимофей Инчагов
92 сообщения
#11 лет назад
И как вы себе это представляете?=)))


Сложно представить но было бы круто . Просто это помогло как верстальщику так и прогеру.
Тимофей Инчагов
92 сообщения
#11 лет назад
Сайт из 6-10 страниц, проще сверстать единожды, и не париться с цмской=)
А для магазина и портала, уже исходя из того - сколько вам заплатят.


А бывают люди которые паяться )
Тимофей Инчагов
92 сообщения
#11 лет назад
..ммм , а накой тут Regexы....увидел {{ считал имя переменной, пробежался по списку поступивших переменных есть - > Заменяем - нет error)/


А список поступивших переменных на которые нужно заменить что без реджета идет?
Тимофей Инчагов
92 сообщения
#11 лет назад
А по поводу того что много сайтов создают на джумле, не спорю многие и не на ней делают, но говорит что данная ЦМС по моему скромному мнению не лидер немножко предвзято!
Имя Фамилия
79 сообщений
#11 лет назад
Сложно представить но было бы круто . Просто это помогло как верстальщику так и прогеру.

Работа интерперетатора, это букавки перевести в циферки=)
поэтому то что есть сейчас, намана работает, другой подход не нужен.(смарти)
А бывают люди которые паяться )

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

Них не понял..
Поступает массив, или список поступивших переменных.
Построчно обрабатываем шаблон
Встретили услоный знак допустим {ЙА переменко} переменная {Йа больше не пеменко}
ТАк вот все что идет за {ЙА переменко} и до {Йа больше не пеменко} считаем переменной.
Взяли ее, смотрим есть ли такая в нашем исходном массиве ясли ест, присваем ее её значение.
А по поводу того что много сайтов создают на джумле, не спорю многие и не на ней делают, но говорит что данная ЦМС по моему скромному мнению не лидер немножко предвзято!

Ну саттелитов еще больше, дальше то что?
Тимофей Инчагов
92 сообщения
#11 лет назад
А может дело совершенно и не в смарти, с ним то и так вполне все понятно, может требуется создать типо CMSW3C - )) и пускай стандартизируют системы управления, может и легче жить станет среди этого изобилия. Хотя опять же стандартизация всегда приводит к торможению развития. Как считаете?
Николай М.
1895 сообщений
#11 лет назад
Цитата ("Reverent1985"):
И как вы себе это представляете?=)))


Сложно представить но было бы круто . Просто это помогло как верстальщику так и прогеру.

Переписать Smarty c PHP на С++, и установить как модуль уже бы дало большой прирост! Только этого никто не спешит делать, ну значит чтото не устаривает самых разработчиков PHP.

Для своего сайта, который я рекламировать конечно не буду: http://mmm.ho.com.ua/ я использую свою систему шаблонов.
Предисловие:
Ну хочу я сайт сделать сам себе с нуля, мне он честно говоря и не нужен, но согласитесь, "программист без сайта" звучит не прилично. Начал с простого, взял дримвюв и нарисовал главную страницу, это била просто тупая статическая страница. Долго возилса чтобы довести до нуля ошибок на валидаторе, ну это не то) Потом подумал что нужно както определить модули, меню и пр., в силу своей любви к СУБД и PHP, я бил в штопоре от не поддержки хранимок, посему я решил полностью отказаться от использования БД.В процессе долгих раздумий и предположенный, у меня вырисовалось такие папки:
css - здесь внутри есть папки с темами, а в них стили CSS к шаблонам (он у меня покачто один)
data - здесь внутри в папках с названиями модулей лежат данные к модулям
images - здесь элементы оформления, рисунки
inc - здесь общеядровые ф-кции
js - ява скрипты к шаблонам и другие
mod - папка с модулями
favicon.ico - иконка
default.html - вот здесь именно в корне шаблон, да не очень хорошо что шаблон в корне, зато всегда можно очень легко в дримвюве редактировать шаблон без всяких извращеный с путями
index.php - ну собственно центральный файл, в файле правил на modrewrite настроен редирект в этот файл, причем всегда, любой запрос попадет сначала сюда!
.htaccess - файл правил
robots.txt


Приведу контент для лучшего примера:
default.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head profile="http://mmm.ho.com.ua/profile/MMM_Corp">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<meta name="GENERATOR" content="MMM_Corp - http://mmm.ho.com.ua&quot;/&gt;
<meta name="author" content="Команда программистов MMM_Corp"/>
<meta name="description" content="Разработка программного обеспечения на заказ от MMM_Corp"/>
<meta name="keywords" content="mmm_corp дизайнер программист флэшер переводчик админ разработчик seo оптимизация дизайн баннер создать сайт интернет магазин резюме портфолио написать программу удаленная работа фриланс вакансии"/>
<meta name="robots" content="ALL"/>
<meta name="Document-state" content="Dynamic"/>
<meta name="Resource-type" content="document"/>
<meta name="expires" content="0"/>
<meta name="COPYRIGHT" content="Copyright (c) 2005-2008 by MMM_Corp"/>


<link href="css/default/style.css" rel="stylesheet" type="text/css" />
<link href="css/default/print.css" media="print" rel="stylesheet" type="text/css" />
<link href="js/index.js" type="text/javascript"/>
<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />


<title>Разработка программного обеспечения на заказ от MMM_Corp - <?php print_title(); ?> </title>
</head>

<body>
<table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>


<td class="left_top_borber">&nbsp;</td>


<td class="top_border" height="22" colspan="3"><span class="itemPoster"><a href="javascript:window.external.AddFavorite(document.location,'');">Добавить в избранное</a></span></td>


<td width="8" class="right_top_borber" >&nbsp;</td>
</tr>
<tr>


<td rowspan="8" class="left_border">&nbsp;</td>


<td class="main_menu" rowspan="2" width="162">


<?php print_mainmenu(); ?>


</td>


<td class="logo" align="center"><img src="images/logo_left.png" width="444" height="116" alt=""/></td>


<td width="20%" rowspan="2" align="right"><div id="reklama" align="left">Место сдается!</div>


<br />


<br />


<span class="itemPoster" > <a onclick="reklama_click()" href="#">А что тут ещё есть ?</a> </span> </td>


<td rowspan="8" class="right_border">&nbsp;</td>
</tr>
<tr>


<td><div id="menu_hint" align="center" style="font-size:small">&nbsp;</div></td>
</tr>
<tr>


<td colspan="3">&nbsp;</td>
</tr>
<tr>


<td colspan="3"></td>
</tr>
<tr>


<td colspan="3"><table width="100%" border="0" align="center" cellspacing="0" cellpadding="0">


<tr>


<td class="content_top_left"></td>


<td class="content_top"><?php print_title(); ?></td>


<td class="content_top_right"></td>


</tr>


<tr>


<td class="content_left">&nbsp;</td>


<td class="content"><?php print_content(); ?> &nbsp; </td>


<td class="content_right">&nbsp;</td>


</tr>


<tr>


<td class="content_bottom_left"></td>


<td class="content_bottom"></td>


<td class="content_bottom_right"></td>


</tr>


</table></td>
</tr>
<tr>


<td colspan="3" align="left">&nbsp;</td>
</tr>
<tr>


<td colspan="3" class="podval">


<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>


<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-3448134");
pageTracker._initData();
pageTracker._trackPageview();
</script>


<!-- (C) 2004 stat24.ru -->


<a href="http://www.stat24.ru" target="_blank"><img src="http://www.stat24.ru/logo/logoWhite2_ru2.gif" width="88" height="33" alt="stat24 -n?ao?ee iinauaaiinoe naeoa" /></a>


<a href="http://littlesun.ru/little/mycounter.php"><img border="0" src="http://www.littlesun.ru/counter/counter2.php" width="90" height="20"></a>


<!--Валидаторы -->


<a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>


<a href="http://jigsaw.w3.org/css-validator/"> <img style="border:0;width:88px;height:31px" src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!" /> </a>


</td>
</tr>
<tr>


<td colspan="3" align="center"><hr width="95%" />


Copyright &copy; MMM_Corp &reg;, 2005-2008 </td>
</tr>
<tr>


<td class="left_bottom_borber">&nbsp;</td>


<td colspan="3" class="bottom_borber"></td>


<td class="right_bottom_border">&nbsp;</td>
</tr>
</table>
</body>
</html>

- это шаблон, который встраивается посредством элементарного include, и легко можно его редактировать с любом визуальном редакторе без вреда для психики и нервов)

index.php
<?php

/**
* @author MMM_Corp
* @copyright MMM_Corp
*/

// короче здесь буду только разбирать запрос, и лепить из него модуля и страинчку в целом

// прикрепляю конфиг
//include('inc/config.php');
include_once('inc/config.php');

// розбираю реквест

if (($_REQUEST["mod"]=='')) {
// главная страница
include('mod/index/index.php');
}
else
{
echo 'mod/'.$_REQUEST["mod"].'/index.php';
// if (file_exists('mod/'.$_REQUEST["mod"].'/index.php'))
{
include('mod/'.$_REQUEST["mod"].'/index.php');
}
{
// главная страница
// include('mod/error/index.php');
}
}

// формирование главной менюхи

// высовиваем блок менюхы
function print_mainmenu(){
require('inc/config.php');

for ($i=0; $i < count($module_fname); $i++){
echo '<a onmouseover="js/index:set_hint('."'".$module_hints[$i]."'".')" onmouseout="index:set_hint('."''".')" class="mainlevel" href="'.'http://'.$_SERVER['SERVER_NAME'];


if ($mod_rewrite) {
echo '/'.$module_fname[$i].'.html"';
}
{
echo '?mod='.$module_fname[$i];
}
echo '"> '.$module_name[$i].'</a>'."\n";
}
}

// прикрепляю шаблон
include($thema.'.html');


?>

здесь как видите думаю итак все понятно, я правда с менюхой еще до конца не разобралса, все думаю об системе кеширования, где вместо лепки меню из скрипта будет лепка только один раз, для этого хочу сделать отдельную папку, принцип тот же что и на смарти, но только вместо тяжелых RegExp, будет использоваться Include, что позволит существенно повысить скорость обработки шаблонов, вроде ничего сложного и не народный велосипед. Правда что еще думал, может вместо:
<?php print_title(); ?>

писать чтото типа:
<?php data[индекс_данных или имя_модуля]; ?>

честно сразу скажу, я не PHP программист и не исследовал строение CMS, но принципы логики и модульности не такие уже и сложные чтобы самому организовать удобную работу со своим сайтом. Перед тем у меня била WCPS, хотел поправить шаблон, но я там чуть не убился, каша, все вперемешку, про визуальное редактирование вообще речи не шло, потом посмотрел на джумлу, элегантнее конечно, но всеравно сложно разобраться. Дальше я подумал, "а что надо написать человеку чтобы он легко мог сделать для меня полностью готовый шаблон?", и тут мне пришло вот что в голову:
- Надо сделать шаблон-пустишку, тоесть папка:
css
images
js
default.html

тоесть папку, которую я дам левому челу, он откроет в дримюве, и у него уже не будет вопросов, про структуру папок, ведь все достаточно понятно, что и как, дальше, "как показать что вот тут такой модуль а тут такой?", очень просто, нужна карта шаблона:
- каждый модуль может иметь параметры конечного результата (признаки: резиновость/статика, CSS и JS которые им принадлежат, и самое главное это номер модуля, напр. "0-0(500/300)-"Главное меню"", то можно понять что модуль тут "главное меню", "статика с размерами 500 на 300 пикселей", также дополнительно карта модулей, напр.:
0 - главное меню
1 - шапка
2 - шапка контента
3 - контент
4 - шапка подвала
5 - контент подвала
и т.д.

вот приблизительно так, я себе представляю унификацию связки шаблон/ядро/представление

конечно это только ИМХО, и данный "талмуд" как заповедь читать не нужно, но согласитесь хоть какойто порядок есть, жаль что консорциум W3.org, не занимается данными вопросами, а так был би порядок!)
Тимофей Инчагов
92 сообщения
#11 лет назад
Хороша идея тем что давно уже избита ) но тривиальность решении задачи не значит плохо, тривиальность это вообще не плохо, это просто ИСТИНА повторенная много раз ))

На своих сайта я тоже использовал (а порой и сейчас) использую что то подобное. Насчет того что W3C не занимается реально очень плохо, видимо отсюда и идет проблема совместимости что никто все это счастье не может стандартизировать и привести к общему виду.
Александр Буланов
174 сообщения
#11 лет назад
Позвольте, MMM_Corp, ваш шаблон по структуре похож на джумловский, только лежит в корне, пути не надо писать. а так, почти тоже самое.
Имя Фамилия
79 сообщений
#11 лет назад
Переписать Smarty c PHP на С++

ОО **се..
И каждую правку в шаблоне перекомпилировать?
А может нуе..го на..
пхп, пайтон, руби. Интерпретаторы, обратная петля,трейсы,форш..
Зачем придумывали, да?))
Компилим и ложим)))
Николай М.
1895 сообщений
#11 лет назад
Цитата ("sapfear"):
Позвольте, MMM_Corp, ваш шаблон по структуре похож на джумловский, только лежит в корне, пути не надо писать. а так, почти тоже самое.

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

Einzam,
- я говорил не про сами шаблоны, а про движок смарти, хотя для серверов с большой нагрузкой будут компилить все что можна скомпилить)
Думаете это так сложно написать свой модуль для апачи? Неа... я это знаю, и даже на делфи можно писать: https://www.weblancer.net/projects/43223.html?section=selected_users#bids, а вот и само творение: http://filebeam.com/a14a63a39dfcc368bde82ce4f5633de8, пароль : j3qq4h7h2v , если разбираетесь в делфи, то написать сайт с большой нагрузкой при нативном коде не будет непосильной задачкой, при которой PHP будет использоваться минимально
Напр. код сайта будет таким:

<?

echo ShowSite(0);

?>

а вся логика будет в откомпилированная, в виде бинарника, гдето вот таким макароном и построенна рапида, все просто)
Имя Фамилия
79 сообщений
#11 лет назад
хотя для серверов с большой нагрузкой будут компилить все что можна скомпилить)

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

Качественный, и нужный. Очень.
Неа... я это знаю, и даже на делфи можно писать:

Для меня все также - делфи среда разработки.
А язык о-паскаль=)
если разбираетесь в делфи, то написать сайт с большой нагрузкой при нативном коде не будет непосильной задачкой, при которой PHP будет использоваться минимально

Наверно открою для вас огромную тайну...но большая часть нагрузки ложится на связи с бд...
А скрипты,в ОСНОВНОЙ своей массе,так , ***ня.
Поэтому толк где нету ТРЯЛЛЯЙОНОВбиильионов операций в секунд никакого,
ну и к тому же я бы посмотрел на вашего монстрика на делфях))
Станислав Малкин
1410 сообщений
#11 лет назад
echo 'mod/'.$_REQUEST["mod"].'/index.php';


Полный абзац, а не код :-)
Николай М.
1895 сообщений
#11 лет назад
Цитата ("ArtLab"):
echo 'mod/'.$_REQUEST["mod"].'/index.php';


Полный абзац, а не код :-)

предложите лучший и обоснуйте чем этот кусок плох? Подчеркиваю код на стадии зародка...