пятница, 16 января 2009 г.

CodeIgniter Partials

В контроллере Игнайтера создаем небольшой приватный метод:

private function template($data,$page='index'){
  $data['content'] = $this->load->view('controller_name/'.$page, $data, true);
  $data['menu'] = $this->load->view('shared/menu', array(), true);
  $this->load->view('shared/layout', $data);
 }
}

Мы собираем партиалы используя возможность метода load не только отображать страницу, но и сохранять ее в переменной если последним параметром передан TRUE.


Использовать метод нужно так:

function view()
{
  $data['title'] = $this->lang->line('title');
  $data['heading'] = $this->lang->line('heading');
  $this->template($data,'view');
}

Для того, чтобы достать партиалы в главном шаблоне нужно сделать так:


echo $content
echo $menu


Только надо вставить вызовы в нужное место cверстанного шаблона(вставка php кода в Html).

пятница, 9 января 2009 г.

Introduction to CodeIgniter

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

Почему имеено CodeIgniter?

Мой любимый яык программирования безусловно только руби, но... программист должен писать на любом языке. Все же,  я хотел найти фреймворк для ПХП похожый на родные Релсы. Таковым на данный момент является CodeIgniter. 

Основные его особенности:
  • MVC архитектура и жесткая структура папок (точно так же как и в рельсах)
  • Встроен PHP аналог ActiveRecord, не такой мощный, это факт, но довольно удобный. При желании использовать что-то помощнее, не трудно подключит полноценный ORM - Doctrine.
  • Удобный роутер урлов( Аля-рельсы).
  • Удобное подключение БД.
  • Легкость настройки всех параметров фреймворка в одном месте (главный контролер, автозагрузка хелперов и т.д.)
  • Большой набор хелперов
  • Очень богатая и подробная ДОКУМЕНТАЦИЯ
  • Богатый набор компонентов и плагинов (например отличный пейдженатор).
  • Простое расширение функционала посредством установки компонент или расширения имеющихся
  • И самое главное для меня, все лежит почти там где и в рельсах, и по возможности реализованы особенности рельсов.
Но все же, ето далеко не Рельса... Сама мощь и красота руби делает рельсы рельсами. 

НИКОГДА Не забывайте ВЕЛИКОГО  НАСТАВНИКА, ибо он раскрывал и раскрывает новичкам и професионалам удивительный мир Ruby on Rails.

вторник, 2 декабря 2008 г.

Lorem Ipsum Dolor....

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

Дело в том, что для проверки шрифтов, отступов и т.д., то-есть правильности верстки, принято заполнять страницу большыми фрагментами текста. Это нужно для того чтобы посмотреть как будут вести себя дом-элементы содержащие текст в реальной работе. Использовать что-то типа: "...Тест Тест Тест Тест Тест Тест...." не есть правильно, так как нужно испоьзовать сбалансированый текст, с правильным распределением пробелов, знаков пунктуации, а также длины слов. Также замечено, что при таких проверках важно чтобы смысл текста не отвлекал тестера от работы. Идеальным текстом является Lorem Ipsum.

Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов. Lorem Ipsum не только успешно пережил без заметных изменений пять веков, но и перешагнул в электронный дизайн. Его популяризации в новое время послужили публикация листов Letraset с образцами Lorem Ipsum в 60-х годах и, в более недавнее время, программы электронной вёрстки типа Aldus PageMaker, в шаблонах которых используется Lorem Ipsum.

Привожу фрагмент текста из 5 абзацов, который можно использовать в работе:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean sed lectus feugiat tortor tincidunt iaculis. Integer malesuada metus laoreet lectus. Donec dictum lobortis libero. Aenean nibh orci, ullamcorper eu, convallis ut, egestas quis, eros. Quisque pellentesque orci eu arcu. Proin urna nisi, accumsan sit amet, condimentum vel, ultricies ac, tellus. Integer fermentum, metus a feugiat vestibulum, urna eros lacinia urna, pulvinar blandit libero sem in neque. Etiam rhoncus. Sed urna. Aliquam consequat, nibh sit amet fringilla dapibus, urna tellus elementum quam, quis tristique quam velit et diam. Nam eget tellus vel tortor varius consequat. Aliquam auctor posuere mi. Pellentesque sit amet ipsum. Nam libero massa, venenatis vel, dapibus eget, lacinia a, erat.

Donec rhoncus sodales tellus. Vestibulum iaculis vehicula justo. Maecenas non dui in nunc egestas gravida. Cras mattis. Integer turpis mauris, pharetra id, feugiat a, elementum et, neque. Etiam purus. Mauris tincidunt, ipsum in sollicitudin consectetur, est nulla porttitor erat, sed blandit lorem erat eget dui. Curabitur ante lectus, mollis sit amet, auctor et, faucibus non, tellus. In commodo. Morbi nibh. Aenean eget sapien eu dolor porttitor auctor. Nullam elementum urna eget tellus. Mauris porta rutrum elit. Morbi eu tellus. In odio. Suspendisse potenti. Nam convallis lacus sit amet libero. Phasellus sem. Etiam augue mi, eleifend in, dapibus sed, ullamcorper vitae, orci.

Donec auctor, lacus et porta varius, lectus ligula ullamcorper augue, in faucibus libero turpis sed dolor. Nam vulputate tortor. Aliquam tempus ante ut tortor. Sed venenatis pretium purus. Curabitur rhoncus magna eget leo. Nunc blandit leo a dui. Etiam ut lectus sit amet turpis dictum luctus. Nunc sed neque non magna placerat placerat. Nam accumsan consequat nunc. Nulla viverra malesuada dui. Donec convallis ante vitae nulla. Duis placerat blandit nunc.

Suspendisse nunc velit, tincidunt eget, accumsan quis, placerat et, arcu. Aliquam erat volutpat. Aenean eu nulla. Donec dignissim, purus nec porta blandit, justo nunc blandit lectus, eu rutrum eros justo vel tortor. Nullam tortor nisl, cursus et, pellentesque ac, ornare ut, orci. Nunc leo. Suspendisse potenti. Pellentesque tristique, magna et porttitor vestibulum, ipsum dui egestas dui, eget accumsan erat ipsum id ante. Morbi ante purus, mollis et, tincidunt id, condimentum posuere, ante. Nulla ullamcorper bibendum metus. Integer ut diam. Donec ullamcorper orci. Sed porttitor, odio non porta faucibus, mi turpis aliquet nisl, vitae euismod dolor felis non eros. Quisque sit amet est sit amet dui ullamcorper lacinia. Aliquam tempus, magna sit amet lacinia lacinia, diam risus malesuada pede, et aliquam felis dui at nulla. Donec diam mi, sollicitudin nec, egestas eget, posuere in, nibh. Proin sit amet dui eget tellus blandit imperdiet. Nullam libero erat, ornare vel, lacinia quis, venenatis sit amet, massa. Sed leo enim, mattis sed, placerat id, venenatis eu, diam. Sed est.

Aliquam blandit. Cras sem. Aenean dictum mauris sit amet pede. Nam eu lectus. Mauris a nisl nec felis interdum pharetra. Maecenas non neque sed neque malesuada sagittis. Suspendisse potenti. Suspendisse condimentum pulvinar nisl. Nunc mi elit, facilisis sed, tempor ac, tincidunt ac, justo. Aliquam dui. Donec neque. Cras neque tortor, sagittis id, consequat sit amet, dapibus quis, magna. Pellentesque id metus ac diam accumsan ullamcorper. Nulla facilisi. Phasellus sit amet neque. Vivamus ac sapien. Sed faucibus urna vel sem. Ut ipsum.




пятница, 14 ноября 2008 г.

Что лучше Ruby или PHP? Или PHP Vs Ruby on Rails

Именно этот вопрос я недавно увидел на каком-то форуме :). Хочу немного помочь в нем разобраться. Впринцыпе хороший сайт, грамотный программист сделает и там и там...
Но..В ПХП есть куча фреймворков, написанных разными людьми с разным уровнем, что выбирать или может написать свой - дело только программиста. В Руби есть замечательный фреймворк, в народе именуемый - Рельсы (Rails), который настолько облегчает разработку, настолько мощный, что скорость разработки увеличивается колосально. Его использует огромное количество програмеров, он отлично оттестирован.
Главные изюминки Ruby on Rails, это:
  1. Сам язык руби, ну уж очень удобный
  2. ActiveRecord - прослойка для работы с любыми БД
  3. MVC архитектура и жесткая привязка кода по папках - искать нужный код просто прелесть
  4. Сильно развитое тестирование (юнит тесты, функциональные, интеграциооные тесты, мок-обьекты, RSpec,...)
Напоследок скажу, человек хоть немного поработав на Ruby on Rails никогда в жизни не задаст вопрос - "А чем это же лучше чем ПХП".

Так что пробуйте товарищи программисты, пробуйте и вы ОЧЕНЬ много для себе откроете нового.

Как итог, сам задам вам вопрос: "Что удобнее, ехать из Киева в Москву велосипедом, или поездом??? Причем неважно на каком уровне вы владеете велосипедом" :)


вторник, 11 ноября 2008 г.

Работающий пример проксирующего скрипта

Реальный работающий прокси-скрипт, для примера из прошлой статьи

include $_SERVER["DOCUMENT_ROOT"]."/common/define.php";
$file=($_GET[file]);
$file = ROOT."/shared".$file;
if(isset($file)){
  $fl = fopen("log_proxy_new.txt","a");
  fwrite($fl,$file."\n");
  $type = substr($file,strlen($file)-3,3);
  if($type=="css"){
      header('Content-type: text/css');
   }else if($type==".js"){
      header('Content-type: application/javascript');
   }
   readfile($file);
}
fclose($fl);
exit;
?>

пятница, 7 ноября 2008 г.

Вынести FCKEditor выше DOCUMENT_ROOT

Для того чтобы вынести FCKEditor выше рута, пришлось немного попотеть, потому хочу облегчить задачу тем кто захочет сделать подобное. Идея вынести редактор возникла по простой причине, допустим, нас есть CMS, на которой настроена туча сайтов. Возникла мысль все общее для всех сайтов вынести наружу, и оформить в отдельном хранилище в форме ядра.

Польза вынесения редактора: вышла новая версия редактора, а старая нас не совсем устраивает (например вылезает баг), а у нас уже есть десяток сайтов на одной основе. В таком случае придется настраивать редактор 10 раз в каждом сайте - согласитесь, трудоемкая задача.

При настройке редактора(FCKEditor), нужно обязательно задать $this->BasePath в файле fckeditor_php5.php. Это путь относоительно которого должен работать редактор, он ОБЯЗАТЕЛЬНО должен быть относительно DOCUMENT_ROOT.

Как же обойти проблему??Самое оптимальное решение было найдено, привожу его вам:

В корне проекта создадим условие фильтра через modrewrite в.httaccess + проксирующий скрипт, который будет обрабатывать все пути доступа к FCKEditor и перенаправлять их куда надо. Причем конфигурационный путь будет вида: $this->BasePath = "http://".$_SERVER[SERVER_NAME].'/tools/fckeditor/' ;
Тоесть, мы не нарушаем идеологию настройки путей редактора.

Пример (работающий) проксирующего скрипта:

--------proxy.php:

";
if(isset($file)){
$file = ROOT."/tools/fckeditor/".$file;
$type = substr($file,strlen($file)-3,3);

if( $type=="php"){
include $file;
}else{
...

}

}

?>

Для того чтобы прокси-скрипт работал, необходимо чтобы все url которые идут к редактору, приходили на прокси посредством Get метода. Для этого в корне сайта положим в файлик httacces следующию дерективу для ModRewrite, который будет вырезать путь после tools/fckeditor/ и передавать в прокси-скрипт.

-----.httacces:

RewriteRule ^tools/fckeditor/(.*)$ /proxy.php?file=$1 [L]


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

---------fckeditor_php5.php

public function CreateFCKeditor($instanceName, $width, $height)
{
$this->InstanceName = $instanceName ;
$this->BasePath = "http://".$_SERVER[SERVER_NAME].'/tools/fckeditor/' ; <-- тут $this->Width = $width ;
$this->Height = $height ;
return $this->CreateHtml() ;
}

Особенности работы $_SERVER[HTTP_REFERER] в IE7

Столкнулся недавно с проблемкой, которая заняла пару часов мое разработки, так как отлавливалась долго. Если вы имеете сценарии на php где используете глобальную переменную среды $_SERVER[HTTP_REFERER] , то вы поимеете проблемы.

Проверено лично: данная переменная отрабатывает корректно в Мозиле, Опере и возвращает неадекватное значение в ИЕ7. Избегайте ее использование так как часто результатом будет пустая строка.

Для людей не стыкавшихся с проблемой - $_SERVER[HTTP_REFERER] - возвращает адрес страницы с которой мы пришли