→

Блог им. seo →  Ура, обновление ImageCMS до версии 2.5.0

Представляю Вашему вниманию новую версию ImageCMS 2.5.0.

Изменения коснулись как ядра системы, так и модулей ImageCMS и ImageCMS Shop.

Во-первых: система полностью переведена на новую версию CodeIgniter 2.0.


( Читать дальше )
-1
seo

Блог им. seo →  Обновление ImageCMS до версии 2.1.6

С радостью представляем Вашему вниманию новую версию ImageCMS 2.1.6.
В большинстве изменения коснулись модуля ImageCMS Shop:

— Сделана возможность оплаты популярными способами: webmoney, robokassa, автоматическое создание счета для оплаты через СберБанк и ОщадБанк
— Создан модуль скидок и возможность применять скидки для различных категорий, товаров.
— Сделана возможность вводить «старую цену».
— Для ImageCMS в целом добавлен простой модуль голосования.


( Читать дальше )
-1
seo

Блог им. seo →  Бесплатная Open-Source CMS и движок интернет магазина от ImageCMS 2.1.0

ImageCMS — бесплатная Open-Source CMS для разработки любой сложности сайтов и интернет магазинов.
В жизни ImageCMS произошло грандиозное обновление, над которым проводилась работа последние четыре месяца– запущено версию ImageCMS 2.1.0.
В рамках работы над новой версией были проделаны следующие изменения:
  • Усовершенствован администраторский интерфейс, в частности дизайн, а также элементы навигации.

  • Осуществлена поддержка php 5.3

  • А также добавлено много других возможностей и исправлено более 12 багов.


Со всем списком изменений можете ознакомиться на странице: http://www.imagecms.net/blog/changelog/versiia_210
Кроме этого мы сделали новый базовый шаблон для ImageCMS, в котором значительно расширили функционал и сделали новый более «красивый» дизайн.


( Читать дальше )
-1
seo

Фреймворки →  Кеширование в Codeigniter при помощи Zend Cache

Codeigniter на столько мощный фреймворк, что приходится пользоваться недофреймфорком Zend Framework, слышал аргумент против Зенд Фреймворка: «это тупо набор классов», скажу, что это нихера не набор классов, а классы в ZF хороши. Поэтому будем пользовать Zend Cache для еширования в Codeigniter.

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

Использование компонента Zend Cache в CodeIgniter неудобно, поэтому решил написать свою библиотеку, которя будет использовать этот механизм кэширования и будет проста в применении с CodeIgniter. Теперь немного опишу своё творение, и расскажу как его применить.

Пример применения библиотеки


Для начала нужно сконфигурировать библиотеку, для этого нужно создать файл cache.php в /aplication/config/ примерно так:

//Путь до библиотеки Zend
$config['path_to_zend']  = '';

//Название фронтэнда
$config['frontend'] = 'Core';
//Название бэкэнда
$config['backend']  = 'File';

//Опции фронтэнда
$config['frontendOption']  = array(
       'lifetime'                  => null,
       'automatic_cleaning_factor' => 0,
       'automatic_serialization'    => true
);

//Опции бэкэнда
$config['backendOption']  = array(
    'cache_dir'              => APPPATH.'cache/',
    'read_control_type'      => 'strlen',
    'file_locking'           => false,
    'hashed_directory_level' => 0,
    'file_name_prefix'         => 'cache'
);


Здесь все ключи массива должны называться как и в документации Zend Cache. Все значения в примере данного конфига демонстрационные, вы сами должны подобрать необходимые для себя параметры.
Теперь библиотека настроена и можно перейти к её применению.
Для загрузки используем уже знакомый нами метод:

$this->load->library('Cache');

Пример 1:


if ( ! $end = $this->cache->load('name_ceche') ) {

    $blog = $this->db->get("blog");
    $category = $this->db->get("category");

    $end['content'] = $blog->result();
    $end['category'] = $category->result();

    $this->cache->save($end, 'name_ceche', array('page1', 'blog'));
}


В первом примере, мы кэшируем целый массив, это возможно если в настройках фронтенда параметр 'automatic_serialization' учтановлен в true.
В таком случае мы можем сохранить в кэш данные примо из базы данных или сразу из нескольких баз данных, либо перед их кэшированием можно как то их обработать что бы не тратить ресурсы сервера потом. Таким образом мы избавляемся от запросов к базе данных (в данном случае двух) и вместо этого подгружаем файл, что выполняется быстрее.

Пример 2:


if ( ! $end = $this->cache->load('name_ceche') ) {

    $blog = $this->db->get("blog");

    $data['content'] = $blog->result();

    $end = $this->load->view('myfile', $data, true);
   
    $this->cache->save($end, 'name_ceche', array('page1', 'blog'));
}


Во втором примере мы видим что кэшируется уже не массив с данными а целая часть страницы. Такой метод позволяет кэшировать данные которые не требуют частого обновления (например список категорий на странице, облако тэгов и т.д.) либо генерация этих данных очень ресурсоёмка и имеет смысл сохранить их на небольшой промежуток времени. И в данном случае опцию 'automatic_serialization' не обязательно устанавливать в true.

Пример 3:


$this->cache->remove('name_ceche');
$this->cache->clean('page1');
$this->cache->clean('blog');


В примере №3 показаны способы удаления кэша который мы создали ранее, в примерах 1 и 2. Но заметьте сделать что это можно сделать разными способами.
С помощью первого метода можно удалить кэш по его уникальному имени, с помощью второго и третьего метода мы сделаем тоже самое но используя ни его имя, а тэги которые были присвоены кэшу. Это позволяет удобно управлять кэшем, например можно удалить кэш категорий только с определённой страницы, задав при сохранении определённые тэги.

Подробную информацию о том для чего определённые настройки и описание бэкендов и фронтэндов не приводил т.к. эта информация есть на русском языке в документации к Zend Cache.

Скачать:
CI-ZendCache.zip
1
1

PHP программирование →  Установка ORM Doctrine на Codeigniter (перевод на русский)

Предисловие:
На хабре была описана Правильная интеграция Doctrine в CodeIgniter. Она то, казалось бы, и правильная, но последняя строка мне не очень понравилась: UPD2: в config/autoload.php обязательно надо выключить «database» из списка загружаемых библиотек. Получается, что с БД, при подключенном Doctrine мы работать не сможем.

Скачать Doctrine


В первую очередь, необходимо скачать последнюю версию Doctrine. И положить в папку system/database.
Для линуксоидов:
$ cd system/database
$ svn co http://svn.phpdoctrine.org/branches/0.10/lib doctrine
$ cd ..

// If you use svn in your project you can set Doctrine
// as an external so you receive bug fixes automatically from svn
$ svn propedit svn:externals database

// In your favorite editor add the following line
// doctrine http://svn.phpdoctrine.org/branches/0.10/lib

Установка Doctrine


Конфигурировать доктрин мы будем в файле system/application/config/database.php. Для этого нам необходимо открыть его в любимом редакторе. А линуксоидам сделать следующее:
$ vi application/config/database.php


Далее находим строку:
$db['default']['cachedir'] = "";

И ниже дописываем:

// Create dsn from the info above
$db['default']['dsn'] = $db['default']['dbdriver'] .
                        '://' . $db['default']['username'] .
                        ':' . $db['default']['password'].
                        '@' . $db['default']['hostname'] .
                        '/' . $db['default']['database'];

// Require Doctrine.php
require_once(realpath(dirname(__FILE__) . '/../..') . DIRECTORY_SEPARATOR . 'database/doctrine/Doctrine.php');

// Set the autoloader
spl_autoload_register(array('Doctrine', 'autoload'));

// Load the Doctrine connection
Doctrine_Manager::connection($db['default']['dsn'], $db['default']['database']);

// Load the models for the autoloader
Doctrine::loadModels(realpath(dirname(__FILE__) . '/..') . DIRECTORY_SEPARATOR . 'models');


Далее подключаем файл application/config/database.php в свой фронт контроллер это файл index.php в корне вашего проекта, его нужно открыть любимым редактором.
Линуксоидам сделать так:
$ cd ..
$ vi index.php

Меняем две последних строчки кода на:
require_once APPPATH.'config/database.php';
require_once BASEPATH.'codeigniter/CodeIgniter'.EXT;

Установка Comand Line интерфейса


Создайте файл system/application/doctrine (без расширения). Линуксоидам:
$ vi system/application/doctrine

Поместите туда следующий код:
<?php
require_once('config/database.php');

// Configure Doctrine Cli
// Normally these are arguments to the cli tasks but if they are set here the arguments will be auto-filled
$config = array('data_fixtures_path'  =>  dirname(__FILE__) . DIRECTORY_SEPARATOR . '/fixtures',
                'models_path'         =>  dirname(__FILE__) . DIRECTORY_SEPARATOR . '/models',
                'migrations_path'     =>  dirname(__FILE__) . DIRECTORY_SEPARATOR . '/migrations',
                'sql_path'            =>  dirname(__FILE__) . DIRECTORY_SEPARATOR . '/sql',
                'yaml_schema_path'    =>  dirname(__FILE__) . DIRECTORY_SEPARATOR . '/schema');

$cli = new Doctrine_Cli($config);
$cli->run($_SERVER['argv']);

Далее создаем папки для нужд и испражнений Doctrine.
system/application/fixtures
system/application/migrations
system/application/schema
system/application/sql

TODO линуксоидам:
// Create directory for your yaml data fixtures files
$ mkdir system/application/fixtures

// Create directory for your migration classes
$ mkdir system/application/migrations

// Create directory for your yaml schema files
$ mkdir system/application/schema

// Create directory to generate your sql to create the database in
$ mkdir system/application/sql


Наш Comand Line интерфейс готов. Дальше всеравно прийдется лезть в командную строку:) Для того что бы просмотреть все, что умеет Doctrine, необходимо запустить shell скрипт:
$ cd system/application
$ ./doctrine
Doctrine Command Line Interface

./doctrine build-all
./doctrine build-all-load
./doctrine build-all-reload
./doctrine compile
./doctrine create-db
./doctrine create-tables
./doctrine dql
./doctrine drop-db
./doctrine dump-data
./doctrine generate-migration
./doctrine generate-migrations-db
./doctrine generate-migrations-models
./doctrine generate-models-db
./doctrine generate-models-yaml
./doctrine generate-sql
./doctrine generate-yaml-db
./doctrine generate-yaml-models
./doctrine load-data
./doctrine load-dummy-data
./doctrine migrate
./doctrine rebuild-db
$

Для фанатов видоуса необходимо запустить скрипт через php
> php.exe doctrine

Использование Doctrine


Для начала работы создадим yaml схему.
---
User:
  columns:
    username:
      type: string(255)
    password:
      type: string(255)

И положим его в папку system/application/schema. Следующая команда сгенерит нам модели (php классы для работы с данными) из yaml файлов и положит их в system/application/models
$ ./doctrine generate-models-yaml
generate-models-yaml - Generated models successfully from YAML schema

Что бы посмотреть, что нам нагенерил Doctrine откроем файл system/application/models/generated/BaseUser.php
<?php

/**
* This class has been auto-generated by the Doctrine ORM Framework
*/

abstract class BaseUser extends Doctrine_Record
{
  public function setTableDefinition()
  {
    $this->setTableName('user');
    $this->hasColumn('username', 'string', 255, array (
));
    $this->hasColumn('password', 'string', 255, array (
));
  }
}

// Add custom methods to system/application/models/User.php

<?php

/**
* This class has been auto-generated by the Doctrine ORM Framework
*/

class User extends BaseUser
{
  public function setPassword($password)
  {
    $this->password = md5($password);
  }
}

/**
* This class has been auto-generated by the Doctrine ORM Framework
*/

class UserTable extends Doctrine_Table
{
  public function retrieveAll()
  {
    $query = new Doctrine_Query();
    $query->from('User u');
    $query->orderby('u.username ASC');

    return $query->execute();
  }
}

Создадим тестовые данные для загрузки в наше приложение. Для этого необходимо создать файл system/application/fixtures/users.yml. И в нем прописать данные:
---
User:
  jwage:
    username: jwage
    password: test

Командой build-all-reload мы пересоздадим нашу БД и модели
$ ./doctrine build-all-reload
build-all-reload - Are you sure you wish to drop your databases? (y/n)
y
build-all-reload - Successfully dropped database named: "jwage_codeigniter"
build-all-reload - Generated models successfully from YAML schema
build-all-reload - Successfully created database named: "jwage_codeigniter"
build-all-reload - Created tables successfully
build-all-reload - Data was successfully loaded

Для того. что бы убедиться, что все сделано правильно откройте/создайте system/application/views/welcome_message.php и добавьте следующий код:
$user = new User();
$user->username = 'zYne-';
$user->setPassword('password');
$user->save();

$userTable = Doctrine::getTable('User');
$user = $userTable->findOneByUsername('zYne-');

echo $user->username; // prints 'zYne-'

$users = $userTable->retrieveAll();

echo $users->count(); // echo '2''
foreach ($users as $user)
{
  echo $user->username;
}
0
1

Фреймворки →  Akismet библиотека для фреймворка CodeIgniter

Akismet это удаленный антиспам веб-сервис.

Если для построения своих приложений вы используете фреймворк CodeIgniter и у вас есть комментарии к статьям, то рассмотренная ниже библиотека защитит вас от спамеров при помощи сервиса Akismet.

Для пользования сервисом Akismet необходимо получить API ключик у них на сайте.

Скачайте библиотеку и положите у себя по адресу application/libraries/.

Как использовать в контроллере:


( Читать дальше )
0
4