Написання власної CMS: варто чи ні?

Написання власної CMS: варто чи ні?

Думаю, чимало веб-розробників писали чи принаймні всерйоз задумували писати власну CMS. І це не лише мої припущення.

Так, на Хабрі є вже доволі давнє опитування «Пишешь ли ты свою CMS, %username%?». З якого видно, що трохи більше 50% користувачів цієї соц. мережі писали, пишуть або будуть писати власну систему для керування сайтом.

А що скажете з цього приводу ви?

Читати далі

Безкоштовні скрипти інтернет-магазинів

Рано чи пізно перед веб-майстром постає завдання запустити інтернет-магазин. Одразу ж виникає питання — писати код «з нуля» (ну, чи взяти за основу фреймворк, але це теж довгий процес) або скористатися готовим рішення (бажано звичайно безкоштовним).

Скрипти інтернет-магазинів

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

Для початку трохи розберемось в термінології. Під інтернет-магазином розуміють сайт, на якому встановлене спеціальне програмне забезпечення (ПЗ), що дозволяє відтворити основні функції реального магазину в інтернеті. Тобто це спеціалізований сайт, в якому  користувач вибирає з каталогу товар і відправляє його в кошик. Потім оформляє замовлення, заповнюючи потрібні поля. Далі всі дані надходять в захищену від стороннього ока адміністративну панель, а тоді вже відбувається зв’язок адміністрації електронного магазину з клієнтом, доставка, продаж і т.д.

Умовно я поділяю програмне забезпечення для магазинів на два типи:

  • ПЗ, яке є розширенням інших систем керування — наприклад, VirtueMart (розширення для Joomla), Ubercart (розширення для Drupal) та інші.
  • Спеціалізовані системи — наприклад, Magento, Prestashop та інші.

Перевагою перших можна назвати повну сумісність «з коробки» з системою керування сайтом (авторизація, статистика і т.д.). Також власнику сайту не потрібно розбиратися з новою системою, адже розширення «по духу» наближене до CMS’ки, на якій працює. Перевага спеціалізованих — система програмується виключно для потреб інтернет-магазину, не обмежена рамками іншої CMS, робить «менше рухів», а отже швидше працює.

Читати далі

П’ятниця 13-го

На цей тиждень випала рідкісна в році дата — п’ятниця 13-го. Тому дозволю собі з цього приводу невеличких «ліричний відступ» з комп’ютерним нахилом.

«Чорна п’ятниця» вважається найбільш небезпечним днем для комп’ютерів. Саме в цей день ймовірність постраждати від несприятливих наслідків роботи вірусів є як-ніколи велика. Виявляється, що ще на «початках» комп’ютерної ери творці вірусів проявляли незрозумілу схильність до п’ятниці 13-го. Вони у свої віруси прописували датою спрацьовування саме цей день.

Одним з перших вірусів, націлених на «чорну п’ятницю» був «Jerusalem» (або ж його ще називають «Time»). У п’ятницю 13 травня 1988-го року відразу кілька фірм і університетів декількох країн світу постраждали від нього. Це був один з перших MS-DOS-вірусів, що став причиною цієї пандемії. Зараженими виявилися комп’ютери з Європи, Америки та Близького Сходу. Були й інші віруси, приурочені п’ятниці 13-го. Саме тому деякі користувачі воліли взагалі не включати свої комп’ютери в цей день.

Фахівці впевнені, що річ тут не в магічному числі, а в самих людях, які налаштовують себе на погане. І я з ними на 100% згоден. Думайте позитивно, використовуйте сучасні антивіруси і буде вам щастя.

sNews — крихітна система управління сайтом

Мабуть, читаючи записи з цього блоґу, ви помітили мою «слабість» до простеньких CMS. Ні, я не проти використання систем Joomla, Drupal, WordPress і т.д. На свій захист можу навести даний блоґ, що успішно працює на WordPress’і. Просто я прихильник «розумного» використання програмного забезпечення: функціоналу має бути в міру і додаткові функції мають бути лише ті, які дійсно потрібні. Тому, коли потрапляє до рук CMS’ка типу «мал, да удал», при нагоді завжди пробую знахідку «на зуб». Благо, знань і досвіду «поколупатися» в коді вистачає.

Логотип CMS sNews

Про систему керування сайтом sNews я дізнався із зарубіжних блоґів, на яких не раз зустрічав схвальні відгуки про неї.

Дозволю собі позбавити вас від необхідності читати перекладений з офіційного сайту на українську мову опис системи, а зупинюсь лише на деяких моментах, з якими я зіштовхнувся в процесі використання sNews на практиці. Тим паче, сам опис ви можете знайти в одній із моїх статей.

Читати далі

Dragdealer JS: прокрутка та перетягування

Dragdealer JS: прокрутка та перетягування

Dragdealer JS — модуль на базі JavaScript, який дозволяє створювати власні інтерфейси прокрутки з можливістю перетягування на сторінці. Написаний на чистому JavaScript, тому для його роботи не потрібно підключати сторонні бібліотеки (jQuery, MooTools і т.д.). Використання Dragdealer JS полегшує розробнику життя, адже йому не потрібно перейматися тим, чи буде відвідувач сайту перетягувати елементи сайту пальцем (сенсорний екран, наприклад, на iPhone) чи мишкою (звичайний комп’ютер). При цьому модуль  має доволі скромну вагу — 12 Кб.

Читати далі

Нові можливості WordPress 3.0

Логотип WordPress'у

Можливо вам відомо, що вчора побачив світ WordPress 3.0 RC — передфінальна версія популярної блоґової CMS під номером три.

Сьогодні вирішив спробувати цей реліз на локальному сервері «Денвер» (Denwer).

Нових можливостей в WordPress 3.0 буде чимало. Але писати про всі є недоцільно, оскільки багато з нововведень звичайному користувачеві ніколи не знадобиться. Тому обмежусь лише найцікавішими, на мою думку.

Читати далі

dhtmlxScheduler — календар подій на JavaScript

dhtmlxScheduler — це он-лайн календар подій / планувальник з приємним інтерфейсом та підтримкою AJAX, що дозволяє додавати, видаляти і редагувати події без перезавантаження всієї сторінки. Календар підтримує компанія DHTMLX — розробник програмного забезпечення з Санкт-Петербурга.

В dhtmlxScheduler реалізована можливість перетягувати (drag-and-drop) події. Тому виставлення початку і тривалості подій є інтуїтивно-зрозумілим заняттям, яке нагадує роботу з Google Calendar.

Читати далі

Вставка рядка всередину іншого

Функція використовується для вставки рядка всередину іншого рядка.

<?php

/**
* @str — рядок, в який вставляють інший рядок
* @ins — рядок, який вставляють в @str
* @begin — число, вказує з якого символа слід почати вставку
**/

function insert_string ($str, $ins, $begin) {

	// функція insert_string() повертає змінений рядок

	// для тексту в UTF-8
	$encoding = 'UTF-8';

	$str = strval($str);
	$ins = strval($ins);
	$begin = intval($begin);

	if ( strlen($str) < $begin ) {
		$str .= $ins;
	} elseif ( $begin < 0 ) {
		$str = $ins . $str;
	} else {
		$str = mb_substr ( $str, 0, $begin, $encoding ) . $ins
			. mb_substr ( $str, $begin, strlen($str), $encoding );
	}

	return $str;
}

// використання:
echo insert_string (
	'Мене звати Іван Мазепа. Навчаюсь в університеті...',
	' Петренко', 15
);

// результат:
// Мене звати Іван Петренко Мазепа. Навчаюсь в університеті...

?>

Створення зменшених копій зображень (thumbnail)

<?php

function create_thumbnail($filename) {
    
    // функція create_thumbnail() створює мініатюру зображенння
    // (англ. thumbnail) з назвою файлу $filename

    // ширина мініатюри (thumbnail) в пікселях
    $final_width_of_image = 150;

    // шлях до папки, яка містить зображення
    // в оригінальному (початковому) розмірі
    $path_to_image_directory = 'images/fullsized/';

    // шлях до папки, де лежатимуть мініатюри
    $path_to_thumbs_directory = 'images/thumbs/';

    // спочатку перевіримо чи зображення (за вказаною адресою) існує
    if(!file_exists( $path_to_image_directory . $filename )) {
	    die("Вказаного файлу-зображення не існує!");
    }

	// допустимі формати для зображень: GIF, JPG, PNG,
	// для них перечислено MIME-типи
	$img_mimetypes = array(
		"image/jpeg",
		"image/jpe",
		"image/jpg",
		"image/pjpeg",
		"image/gif",
		"image/png",
		"image/x-png"
	);

    // дізнаємось MIME-тип поточного зображення
    $img_info = getimagesize($path_to_image_directory . $filename);
    $mimetype = $img_info['mime'];

	// перевіряємо, чи має зображення допустимий MIME-тип
	if ( !in_array($mimetype, $img_mimetypes) ) {
		die("Невірний MIME-тип зображення!");
	}

	switch ($mimetype) {
	    case "image/jpeg":
	    case "image/jpg":
	    case "image/jpe":
	    case "image/pjpeg":
	        $im = imagecreatefromjpeg($path_to_image_directory . $filename);
	        break;
	    case "image/gif":
	        $im = imagecreatefromgif($path_to_image_directory . $filename);
	        break;
	    case "image/png":
	    case "image/x-png":
	        $im = imagecreatefrompng($path_to_image_directory . $filename);
	        break;
	}

    $ox = imagesx($im);
    $oy = imagesy($im);

    $nx = $final_width_of_image;
    $ny = floor($oy * ($final_width_of_image / $ox));

    $nm = imagecreatetruecolor($nx, $ny);

    // функція imagecopyresampled() робить "ресайз" і проводить
    // sampling, тобто видалення шуму і згладжування
    imagecopyresampled(
    	$nm, $im,
	    0, 0,
	    0, 0,
	    $nx, $ny,
	    $ox, $oy
    );

    // перевіряємо, чи папка, в яку ми хочемо покласти
    // зображення-мініатюру, існує 
    if(!file_exists($path_to_thumbs_directory)) {
	    if(!mkdir($path_to_thumbs_directory)) {
	    	die("Відбулась помилка. Будь ласка, спробуйте ще раз!");
	    }
    }

    // записуємо зображення на диск у форматі JPEG,
    // третій параметр - якість зображення (діапазон: від 0 до 100)
    imagejpeg($nm, $path_to_thumbs_directory . $filename, 80);

}

// для прикладу згенеруємо мініатюру зображення
// "images/fullsized/cat.jpg"

create_thumbnail('cat.jpg');

?>

Читати далі