Последние записи

Посты по категории -> PHP

Пример JOIN и UPDATE

Дата: 04-12-2014
UPDATE products_prices as pp
		INNER JOIN products as pr
		ON pp.product_id=pr.id
SET price=price*1.1
WHERE pr.category_id=1
UPDATE products_prices as pp
                 INNER JOIN products as pr
                 ON pp.product_id=pr.id
                              INNER JOIN brands as br
                              ON pr.brand_id=br.id
 SET price=price*$koef
 WHERE br.id=$brand_id

Создаем страницу ошибки 404 Kohana 3.3

Дата: 28-10-2014
class HTTP_Exception_404 extends Kohana_HTTP_Exception_404 {
 
    /**
     * Generate a Response for the 404 Exception.
     *
     * The user should be shown a nice 404 page.
     * 
     * @return Response
     */
    public function get_response()
    {
        $view = View::factory('errors/404');
 
        // Remembering that `$this` is an instance of HTTP_Exception_404
        $view->message = $this->getMessage();
 
        $response = Response::factory()
            ->status(404)
            ->body($view->render());
 
        return $response;
    }
}

 

http://kohanaframework.org/3.3/guide/kohana/tutorials/error-pages


ORM Kohana Links

Дата: 08-10-2014

Офф сайт:
https://kohanaframework.org/3.3/guide/orm

Статьи по ORM на Хабре:
http://habrahabr.ru/search/?q=ORM&target_type=posts&order_by=relevance

Примеры работы с ORM (применительно к CodeIgnater)[en]:
http://datamapper.wanwizard.eu/pages/toc.html

Основы ORM:
http://kohanaframework.su/database/orm_entering

 


Примеры использования error_reporting()

Дата: 15-10-2013
<?php

// Выключение протоколирования ошибок
error_reporting(0);

// Включать в отчет простые описания ошибок
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Включать в отчет E_NOTICE сообщения (добавятся сообщения о 
//непроинициализированных переменных или ошибках в именах переменных)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Добавлять сообщения обо всех ошибках, кроме E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Добавлять в отчет все PHP ошибки (см. список изменений)
error_reporting(E_ALL);

// Добавлять в отчет все PHP ошибки
error_reporting(-1);

// То же, что и error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

Класс Request Kohana

Дата: 27-09-2013
// From within a controller
$this->request->action();
$this->request->controller();
$this->request->directory();

//Can be used anywhere
Request::current()->action();
Request::current()->controller();
Request::current()->directory();

Таким образом мы можем в любом месте нашего приложения определить текущий контроллер, action и директорию.

Установка модуля Pagination Kohana 3.2

Дата: 02-05-2012

1. Качаем модуль по ссылке на GitHub https://github.com/kloopko/kohana-pagination

2. Устанавливаем в папку c модулями /modules/pagination/

3. Копируем файл с конфигом config.php в основную папку конфигов нашего приложения /application/config

У меня он выглядит так:

'default' => array(
		'current_page'      => array('source' => 'route', 'key' => 'page'), // source: "query_string" or "route"
		'total_items'       => 0,
		'items_per_page'    => 5,
		'view'              => 'pagination/basic',
		'auto_hide'         => FALSE,
		'first_page_in_url' => FALSE,

4. Неоходимо в bootsrap.php подключить модуль:

Добавить

Kohana::modules(array(
	'auth'       => MODPATH.'auth',       // Basic authentication
	// 'cache'      => MODPATH.'cache',      // Caching with multiple backends
	// 'codebench'  => MODPATH.'codebench',  // Benchmarking tool
	'database'   => MODPATH.'database',   // Database access
	// 'image'      => MODPATH.'image',      // Image manipulation
	'orm'        => MODPATH.'orm',        // Object Relationship Mapping
	// 'unittest'   => MODPATH.'unittest',   // Unit testing
	// 'userguide'  => MODPATH.'userguide',  // User guide and API documentation
        'captcha'    => MODPATH.'captcha', //Captcha
        'pagination' => MODPATH.'pagination', // Pagination
	));

4. Переписываем роут где нужно сделать постраничную навигацию:

Route::set('default', '((/(/page)(/)))', array('page'=>'[0-9]+'))
	->defaults(array(
		'controller' => 'index',
		'action'     => 'index',
	));

5. В экшине контроллера где выводится постраничная навигация прописываем, что-то вроде:

    public function action_index() {
        
        // echo 'Page -> ' . $this->request->param('page');
        
        $count = ORM::factory('note')->count_all();
        
        $pagination = Pagination::factory(array(
            'total_items' => $count,
        ))
        ->route_params(array(
        'controller' => Request::current()->controller(),
        'action' => Request::current()->action(),
));
        
        $posts = ORM::factory('note')->order_by('date', 'DESC')
                ->limit($pagination->items_per_page)
                ->offset($pagination->offset)
                ->find_all();
        
        $this->template->content = View::factory('front/v_posts', array(
            'posts' => $posts,
            'pagination' => $pagination,));
    }

6. В вид переданы посты и html постраничной навигации. That's all!


Серверные переменные PHP. Суперглобальный массив $_SERVER.

Дата: 12-02-2012

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

Массив $_SERVER

Просмотреть его можно, например, при помощи дампа массива - print_r($_SERVER) или phpinfo();

Наиболее часто используемые:

$_SERVER['HTTP_HOST'] - Имя сервера, которое, как правило, совпадает с доменным именем сайта, расположенного на сервере. Как правило, имя, указанное в данном параметре совпадает с именем $_SERVER['SERVER_NAME'].
$_SERVER['HTTP_USER_AGENT'] - Отдает информацию о типе броузера и операционной системы посетителя. Например, Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1
$_SERVER['HTTP_ACCEPT'] - Содержание заголовка ACCEPT. Например, text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
$_SERVER['HTTP_ACCEPT_LANGUAGE'] - Содержание заголовка Accept-Language. Напимер, en-us,en;q=0.7,ru;q=0.3
$_SERVER['HTTP_ACCEPT_ENCODING'] - Содержание заголовка Accept-Encoding, если он есть. Например, gzip, deflate
$_SERVER['HTTP_ACCEPT_CHARSET'] - Содержание заголовка Accept-Charset. Например, ISO-8859-1,utf-8;q=0.7,*;q=0.7
$_SERVER['HTTP_CONNECTION'] - Содержание заголовка Connection. Например, keep-alive
$_SERVER['HTTP_CACHE_CONTROL'] - Содержание заголовка Connection. Например, max-age=0
$_SERVER['PATH'] - /sbin:/usr/sbin:/bin:/usr/bin
$_SERVER['SERVER_SIGNATURE'] - Описание веб-сервера. Например, Apache/2.2.15 (CentOS) Server at 194.189.70.48 Port 80
$_SERVER['SERVER_SOFTWARE'] - Веб-сервер. Ответ: Apache/2.2.15 (CentOS)
$_SERVER['SERVER_NAME'] - Имя сервера, как правило, совпадающее с доменным именем сайта. Например, site.com, 194.411.70.48
$_SERVER['SERVER_ADDR'] - IP-адрес сервера. Например, 192.168.1.156
$_SERVER['SERVER_PORT'] - Порт работы веб-сервера. Например, 80
$_SERVER['REMOTE_ADDR'] - Удаленный адрес клиента. Например, 192.168.1.1
$_SERVER['DOCUMENT_ROOT'] - Корневая директория в которой находится скрипт. Например, /var/www/http/
$_SERVER['SERVER_ADMIN'] - Адрес администратора сервера. Например, admin@gmail.com
$_SERVER['SCRIPT_FILENAME'] - Абсолютный путь к скрипту от корня ОС. Например, /var/www/http/php/index.php
$_SERVER['REMOTE_PORT'] - Порт удаленного клиента. Например, 56415
$_SERVER['GATEWAY_INTERFACE'] - Версия интерфейса Common Gateway Interface (CGI), который используется в работе сервера. Например, CGI/1.1
$_SERVER['SERVER_PROTOCOL'] - Описание версии протокола, используемой сервером. Например, HTTP/1.1
$_SERVER['REQUEST_METHOD'] - Метод запроса, который применяется для вызова скрипта: GET или POST. Например, GET
$_SERVER['QUERY_STRING'] - Параметры, переданные скрипту, если строка запроса представляет собой адрес.
$_SERVER['REQUEST_URI'] - Имя скрипта, начиная от корневой директории виртуального хоста и параметры, т.е. если строка запроса представляет собой адрес. Например, /php/
$_SERVER['SCRIPT_NAME'] - Значение пути к скрипту от корня адреса. Например, /catalog/index.php
$_SERVER['PHP_SELF'] - Имя скрипта, начиная от корневой директории виртуального хоста, т.е. если строка запроса представляет собой адрес http://site.com/php/index.php, то ответ будет: /php/index.php
$_SERVER['REQUEST_TIME'] - Время старта скрипта в формате timestamp. Например, 1331575390


SyntaxHighlighter в CKeditor на Kohana

Дата: 27-02-2011

1. Качаем последнюю версию SyntaxHighlighter (на момент написания 3.0.83 по ссылке http://alexgorbatchev.com/SyntaxHighlighter/download/download.php?sh_current. Устанавливаем в директорию /media/js/syntax

2. Качаем плагин SyntaxHighlighter для CKeditor по ссылке http://code.google.com/p/ckeditor-syntaxhighlight/downloads/list.

3. Распаковываем и устанавливаем его в папку с CKeditor, например /media/js/ckeditor/plugins/syntaxhighlight

4. Подключаем файлы стилей для подсветки кода, ядро и тему по дефолту (можно и другие темы, список тем и демо к ним здесь - http://alexgorbatchev.com/SyntaxHighlighter/manual/themes/)

$this->template->styles = array('media/css/style.css',
            'media/js/syntax/styles/shCore.css',
            'media/js/syntax/styles/shThemeDefault.css');

5. Далее подключаем файлы скриптов с нужными языками:

$this->template->scripts = array(
            /* 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', */
            'media/js/syntax/scripts/shCore.js',
            'media/js/syntax/scripts/shBrushPhp.js',
            'media/js/syntax/scripts/shBrushJScript.js',
            'media/js/syntax/scripts/shBrushCss.js',
            'media/js/syntax/scripts/shBrushBash.js',
        );
 $this->template->scripts[] = 'media/js/jquery-1.6.2.min.js';

5. В конфиге CKeditor - в файле config.js прописываем:

CKEDITOR.editorConfig = function( config )
{
        config.extraPlugins = 'syntaxhighlight';
        config.toolbar_Full.push(['Code']);
};

6.  В нужно view выводим функцию включения плагина:

7. После чего в панели CKeditor должна появится кнопка вставки кода:

8. После нажатия вываливается окно с опцией выбора языка подсветки (который должен быть обязательно прописан в п.4 )

Окно вставки кода в CKeditor

9. Во вкладке Advanced есть возможность опциально выделить любые строки кода, уставновить флажок переноса строк (что достаточно удобно) и еще пару функции - начало строки ит.д.