Книги о CodeIgniter

Некоторое время назад я выкладывал несколько книг о jQuery.  На этот раз будет гораздо меньше подборка, но всё равно не менее полезная: речь идёт о CodeIgniter. В принципе, их не так уж и сложно найти в интернете, а так же там не настолько больше информации, чем можно найти в официальной документации, но всё же (-: Всегдаприятно иметь всё в одном месте, а не рыскать в поиске нужных пары строк…

Итак:

1. Codeigniter for rapid php application development

2. Professional CodeIgniter

Ну и не забываем про документацию на русском!

Август 5th, 2009 by none | 3 комментария

Обновление FreeBSD 7.1 до 7.2

Решил я тут обновить одну машинку с 7.1 до 7.2. На тот момент я даже не представлял, насколько это будет легко (-: Всё, что нам нужно — это выход в интернет (-: и чем толще канал, тем, безусловно, лучше.

А последовательность действий такая:

1. Из-под рута:

# freebsd-update upgrade -r 7.2-RELEASE

Система сделает одной ей понятной проверку, загрузит какие-то файлы и спросит, точно ли вы уверены в том, что собираетесь сделать??? (-:

2. Если уверены, то вот вам следующая команда:

# freebsd-update install

3. Потом система попросит перезагрузить компьютер, чтобы загрузиться уже с новым ядром, а уж только потом продолжить обновление:

# shutdown -r now

4. После перезагрузки следуют продолжить процесс обновления, после которого опять надо будет перегрузиться, чтоб совершить процесс апгрейда:

# freebsd-update install
# shutdown -r now

5. Всё. Процесс апгрейда завершён (-: Как видите, нет ничего сверхъестественного. Всё просто и понятно, но, как ни странно, это работает, за что огромное спасибо разработчикам (-:

Не верите??? Проверьте:

# uname -a

По материалам сайта freebsd.org

Август 4th, 2009 by none | 3 комментария

Установка TinyMCE

Некоторое время назад я рассказывал об установке и настройке редактора FCKeditor. Всем хорош и замечателен этот редактор, но что-то мне так вот сходу не удалось его подогнать под необходимый мне дизайн по размеру и цветам его рабочее окно. Совсем уж опечалившись, я стал бродить по просторам интернета в поисках альтернативы. И тут мне на глаза попал другой редактор, уж и не помню, где я его увидел, в «Одноклассниках» что ль (-: И было ему имя — TinyMCE. Поизучав страничку создателей, посмотрев страничку примеров использования TinyMCE пришёл к выводу: надо брать и использовать! (-:

Ну а дальше всё легко и просто (-:

1. Качаем исходники редактора с соответствующей странички Download. Как Вы там сможете заметить, то существует несколько различных вариантов, в том числе и в качестве jQuery сборки, что есть невообразимый гуд (-:

2.  Разархивируем это всё в нужную нам папку, из которой уже потом будем подключать его себе на страничку.

3.  Подключаем его себе внутри тэгов <head>:

<script type="text/javascript" src="../путь_к_tinymce/tiny_mce.js"></script>

4. Производим инициализацию редактора:

<script type="text/javascript">
tinyMCE.init({
	mode : "textareas"
});
</script>

Как нетрудно заметить, редактор настроен для работы с областью <textarea>. Поэтому данная облать должна быть включена в тело нашей страницы:

<textarea name="content" cols="50" rows="15">Какой-то текст</textarea>

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

Август 4th, 2009 by none | 8 комментариев

Codeigniter и SWFUpload

Не так давно я открыл для себя достаточно интересный фреймворк, но уже для php — Codeigniter. В принципе, достаточно простой, удобный, мощный и, что очень важно, быстрый фреймворк. Я планирую ещё написание цикла статей по работе с Codeigniter, от самого начала до создание каких-то более-менее вразумительных задач. Лично я создаю на нём свою собственную CMS — noneCMS, да вот такой я скромный (-: Это исключительно для себя будет детище (-:

Так вот… понадобился мне загрузчик файлов на сервер из моей CMS. Ну там фотки всякие, картинки, мало ли что может понадобиться. Смысл был в том, что загрузив изображения, они должны быть потом доступны при создании статей, т.е. в TinyMCE. К слову, в качестве редактора у себя я использую именно TinyMCE. Надо будет тоже написать несколько статей по его установке и настройке — уж больно вкусная шняжка (-: Но сейчас не об этом.  Думал что-то найти, замутить, чтоб связать jQuery и CI, чтоб асинхронно передавать файлики на сервер. Однако не нашлось никакого тривиального решения, особенно для мультизагрузки файлов. Перелопатив пол-интернета в поисках приемлемого решения, сначала остановил свой взор на Uploadify. Однако мне так и не удалось его подружить с CI. Больно заковыристо он использует скрипт на сервере, и правка кода исходников тоже не помогла. А может просто руки у меня не из того места растут (-: После нескольких дней безуспешных попыток скрестить Codeigniter  и Uploadify, Евгений Самборский подсказал мне наличие другого замечательного решения — SWFUpload. На сайте разработчиков можно посмотреть несколько демок, чтоб понять, что это и с чем это едят. Я же расскажу, как заставить эту сладкую парочку работать друг с другом. Я наивно предполагаю, что Вы уже умеете работать с Codeigniter (-: Если нет, то ждите в скором времени статей для новичков, как работать с этим продуктом (-:

Для остальных же имеем следующее:

1. Установленный и настроенный для работы CI.

2. Скачиваем SWFUpload. Хотя этого будет мало (-: Ну лично у меня не получилось заставить работать этот плагин только скачав его ядро. Поэтому я взял за основу пример на странице разработчиков SWFUpload. Всё, необходимое для работы плагина, я сохранил в папке swfupload в корне рабочей папки Codeigniter. О! Чуть не забыл: в Firefox 3.0.11 у меня не работали демки с сайта SWFUpload. Пришлось обновить его, огненного лиса, до последней версии 3,5. Так вот, в папке swfupload находится следующее:

  • папка Flash
  • папка plugins
  • default.css
  • fileprogress.js
  • handlers.js
  • jquery-1.3.2.js
  • swfupload.js
  • swfupload.queue.js
  • XPButtonUploadText_61x22.png — это кнопка (-:

3. Дальше создаём view для отображения в CI:

<html>
<head>
<meta http-equiv=»content-type» content=»text/html; charset=UTF-8″>

<script type=»text/javascript» src=»<?php echo base_url(); ?>swfupload/jquery-1.3.2.js»></script>

<script type=»text/javascript» src=»<?php echo base_url(); ?>swfupload/swfupload.js»></script>
<script type=»text/javascript» src=»<?php echo base_url(); ?>swfupload/swfupload.queue.js»></script>
<script type=»text/javascript» src=»<?php echo base_url(); ?>swfupload/fileprogress.js»></script>
<script type=»text/javascript» src=»<?php echo base_url(); ?>swfupload/handlers.js»></script>

<link href=’<?php echo base_url(); ?>swfupload/default.css’ rel=»stylesheet» type=»text/css» />

<script type=»text/javascript»>

$(document).ready(function(){

var upload1;

upload1 = new SWFUpload({
// Backend Settings
upload_url: «<?php echo base_url(); ?>index.php/swfupload/do_upload»,
post_params: {«PHPSESSID» : «r1b26raj2pe1ef637fv1mg3dk7″},

// File Upload Settings
file_size_limit : «1024″,    // 100MB
file_types : «*.jpg;*.gif;*.png»,
file_types_description : «All Files»,
file_upload_limit : «10″,
file_queue_limit : «3″,

debug : true,

// Event Handler Settings (all my handlers are in the Handler.js file)
file_dialog_start_handler : fileDialogStart,
file_queued_handler : fileQueued,
file_queue_error_handler : fileQueueError,
file_dialog_complete_handler : fileDialogComplete,
upload_start_handler : uploadStart,
upload_progress_handler : uploadProgress,
upload_error_handler : uploadError,
upload_success_handler : uploadSuccess,
upload_complete_handler : uploadComplete,

// Button Settings
button_image_url : «<?php echo base_url(); ?>swfupload/XPButtonUploadText_61x22.png»,
button_placeholder_id : «spanButtonPlaceholder1″,
button_width: 61,
button_height: 22,

// Flash Settings
flash_url : «<?php echo base_url(); ?>swfupload/flash/swfupload.swf»,

custom_settings : {
progressTarget : «fsUploadProgress1″,
cancelButtonId : «btnCancel1″
},

// Debug Settings
debug: false
});

});
</script>

</head>
<body>

<div>
<div class=»fieldset flash» id=»fsUploadProgress1″>
<span class=»legend»>Large File Upload Site</span>
</div>
<div style=»padding-left: 5px;»>

<span id=»spanButtonPlaceholder1″></span>
<input id=»btnCancel1″ type=»button» value=»Cancel Uploads» onclick=»cancelQueue(upload1);» disabled=»disabled» style=»margin-left: 2px; height: 22px; font-size: 8pt;» />
<br />
</div>
</div>

</body>
</html>

В принципе, ничего сверхъестественного,  все настройки можно найти на сайте разработчиков SWFUpload. Хочу обратить ваше внимание на то, что подключены все упомянуты мною файлы *.js, а в качестве обработчика с серверной стороны указан index.php/swfupload/do_upload. Нам этот обработчик ещё предстоит создать. Вот этим и займёмся.

4. Создаём контроллер для нашего мультизагрузчика. Лично я особо ничего не выдумывал и взял для начала стандартный пример для загрузки файлов из помощи по Codeigniter. Собственно, вот сам контроллер:

<?php if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

class Swfupload extends Controller {

function Swfupload()
{
parent::Controller();
$this->load->helper(array(‘form’, ‘url’));
}

function index()
{
$this->load->view(‘swfupload’);
}

function do_upload()
{
$config['upload_path'] = ‘./uploads/’; // server directory
$config['allowed_types'] = ‘gif|jpg|png’; // by extension, will check for whether it is an image
$config['max_size']    = ’1000′; // in kb
$config['max_width']  = ’1024′;
$config['max_height']  = ’768′;

$this->load->library(‘upload’, $config);
//      $this->load->library(‘Multi_upload’);

$files = $this->upload->do_upload(‘Filedata’);

if ( ! $files )
{
$error = array(‘error’ => $this->upload->display_errors());
$this->load->view(‘upload_form’, $error);
}
else
{
$data = array(‘upload_data’ => $files);
$this->load->view(‘upload_success’, $data);
}
}
}
?>

Все, как видите, предельно просто (-: Единственное, на что обращаю ваше внимание, это вызов нашего метода контроллера, отвечающего, собственно, за загрузку:

$files = $this->upload->do_upload(‘Filedata’);

Здесь ‘Filedata’ — это id поля по умолчанию, по которому и передаётся, собственно, файл. В принципе, оно может быть произвольным, необходимо только при инициализации указать соответствующий параметр: file_post_name.  Но и это ещё не всё (-: При настройках по умолчанию CI не станет загружать файлы… Поэтому необходимо ещё произвести некоторые настройки, о чём подробно написано вот тут:

открываем файл system/application/config/mimes.php и для необходимых расширений файлов (в моём случае это jpg, gif и png) меняем на следующее:

‘gif’    =>    array(‘image/gif’, ‘application/octet-stream’),
‘jpeg’  =>  array(‘image/jpeg’, ‘image/pjpeg’, ‘application/octet-stream’),
‘jpg’   =>  array(‘image/jpeg’, ‘image/pjpeg’, ‘application/octet-stream’),
‘jpe’   =>  array(‘image/jpeg’, ‘image/pjpeg’, ‘application/octet-stream’),
‘png’   =>  array(‘image/png’,  ‘image/x-png’, ‘application/octet-stream’),

Теперь CI чудесным образом будет принимать и складывать все ваши картинки в указанной Вами директории, в моём случае это /uploads/.  Вот и всё, что касается того, как подружить Codeigniter и SWFUpload.

Но мой туториал на этом не заканчивается! (-: Если Вы внимательно посмотрите на примеры использования, то увидите, что прогресс-бар загрузки файлов разного цвета когда файл поставлен в очередь загрузки, когда загружается и когда уже загружен. Ну вот мне не подходили данные цвета, указанные по умолчанию, ну не вписываются они в цветовую гамму моего дизайна! (-: поэтому было решено изменить цвета под свой дизайн.  Первое, что пришло в голову — это всё сделано в swf-файле и мне срочно нужен декомпилятор, чтоб получить  fla-файл и там поменять цвета… но всё оказалось гораздо прозаичнее: все цвета меняются в файле default.css.  В частности идёте в раздел «Table Styles», там есть соответствующие разделы:

  1. /* Error */
    .red {
    border: solid 1px #B50000;
    background-color: #FFEBEB;
    }
  2. /* Current */
    .green {
    border: solid 1px #DDF0DD;
    background-color: #FFFFCC;
    }
  3. /* Complete */
    .blue {
    border: solid 1px #CEE2F2;
    background-color: #f6de76;
    }

Думаю, из названий понятно, где, когда и что используется (-: Правда после моих изменений blue уже как бы и не blue, да и green уже далеко не green… ну да меня это даже как-то совсем и не волнует (((-: Главное, что оно мне по цвету подходит (-:

Вот теперь уже точно всё! Надеюсь, кому-то это поможет (-:

P.S. Если вдруг что-то не получится — свистите, выложу полностью исходники (-:

P.P.S. Всем замечательный плагин SWFUpload, но вот надписи-то в нём на английском! Как бы меня это не сильно расстроило, но решил и это настроить (-:  Оказалось всё до ужаса прозаично, даже никаких танцев с бубном (-: Просто открываете файл handlers.js и правите там соответствующие сообщения, лично я пока только исправил «Pending…», «Uploading…» и «Complete» на соответственно «Ожидает…», «Идёт загрузка…» и «Загружено». Так же в этом файле можно настроить и сообщения об ошибках и т.п.

Июль 10th, 2009 by none | 10 комментариев

Умер Майкл Джексон

Что вам сказать… я в шоке…

Вот подтверждения сказанному: CNN. Можно по-разному относиться к его творчеству, к его личности, но что это была очень значительная личность в музыке — это факт… и факт неоспоримый… Каких-то 50 лет… мог бы ещё пожить… операции, пластика и т.п. ерунда сделали своё дело: они его тупо убили…

А может он как Элвис? Улетел домой?..

Июнь 26th, 2009 by none | Один комментарий