PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (65): В начало « ... 54 55 56 57 [58] 59 60 61 62 ... » В конец
Найдено сообщений: 972
sKaa
Отправлено: 26 Ноября, 2011 - 18:23:28 • Тема: POST, ajax, кодировка • Форум: Кодировки и все смежное
Ответов: 9 Просмотров: 3987
Если тебе нужно данные отправленные с помощью Ajax перекодировать на стороне пхп то
Если полученные как callback то как-то так :
CODE (
javascript ):
скопировать код в буфер обмена
//utf8 to 1251 converter
function utf8_decode ( aa) {
var bb = '' , c = 0 ;
for ( var i = 0 ; i < aa.length ; i++ ) {
c = aa.charCodeAt ( i) ;
if ( c > 127) {
if ( c > 1024) {
if ( c == 1025) {
c = 1016 ;
} else if ( c == 1105) {
c = 1032 ;
}
bb += String.fromCharCode ( c - 848) ;
}
} else {
bb += aa.charAt ( i) ;
}
}
return bb;
}
sKaa
Отправлено: 26 Ноября, 2011 - 17:19:06 • Тема: Паттерн Registry и множество его объектов • Форум: Объектно-ориентированное программирование
Ответов: 8 Просмотров: 5348
Спойлер (Отобразить )
PHP:
скопировать код в буфер обмена
class Registry implements ArrayAccess, Countable
{
// protected function __construct() { /* ... */ }
protected function __clone( ) { /* ... */ }
protected function __wakeup( ) { /* ... */ }
protected function __invoke( ) { /* ... */ }
protected $data = array ( ) ; protected $_key = 0 ;
public function set( $key , $var ) {
$this -> data [ $key ] = $var ;
}
public function get( $key ) {
if ( isset ( $this -> data [ $key ] ) == false ) { return null ;
}
return $this -> data [ $key ] ;
}
public function remove( $key ) {
unset ( $this -> data [ $key ] ) ; }
/*
Класс, реализующий интерфейс Countable, должен иметь следующие методы:
*/
return count ( $this -> data ) ; }
/*
Класс, реализующий интерфейс ArrayAccess, должен иметь следующие методы:
*/
function offsetExists( $offset ) {
return isset ( $this -> vars [ $offset ] ) ; }
function offsetGet( $offset ) {
return $this -> get ( $offset ) ;
}
function offsetSet( $offset , $value ) {
$this -> set ( $offset , $value ) ;
}
function offsetUnset( $offset ) {
unset ( $this -> vars [ $offset ] ) ; }
}
Итак : Как видно класс реализует 2 интерфейса ArrayAccess и Countable значит нам доступен такой синтаксис :
PHP:
скопировать код в буфер обмена
$Registry = new Registry;
$Registry [ 'test' ] = 123 ;
$Registry [ 'test2' ] = 321 ;
echo count ( $Registry ) ; // Выведет 2 echo $Registry -> count ; // Выведет 2
Ну об этих интерфейсах уже давно всем всё известно. Внимание вопрос :
Как посчитать объекты в такой реализации?
sKaa
Отправлено: 26 Ноября, 2011 - 17:03:32 • Тема: Как узнать размер файла? • Форум: JavaScript & VBScript
Ответов: 6 Просмотров: 2593
JavaScript не каким образом не работает с файловой системой, на чистом JS нельзя узнать размер файла.
Только средствами пхп filesize( .. ) ;
Можно конечно Ajax + php. Но без загрузки на сервер эта связка не пройдет.
sKaa
Отправлено: 24 Ноября, 2011 - 04:20:00 • Тема: Как сделать правильную CMS • Форум: Объектно-ориентированное программирование
Ответов: 105 Просмотров: 32208
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
class Tpl {
private $key ,
$need_compilate = 1,
$cache_dir ,
$cache_name ,
$cache_expired = 1 // Время жизни кэша в секундах
;
public $content ;
public $parse_tpl ;
public $engine = array ( ) ;
public function __construct( $key = null ) {
global $config ;
$this -> key = $this -> getkey ( $key ) ;
$this -> cache_dir = $config [ 'tpl_cache_dir' ] ; // создай папку, скажем cache в корне сайта.
$this -> cache_name = $this -> cache_dir . $this -> key . '.php' ;
if ( $this -> cache_expired ( ) ) {
} else {
$this -> need_compilate = 0 ;
}
}
public function merge( $array ) {
return $this ;
}
public function set( $name , $val = "" ) {
if ( $this -> need_compilate == 0) return $this ;
$this -> vars [ '{' . $name . '}' ] = $val ;
foreach ( $val as $k => $v ) {
$this -> vars [ '{' . $name . '}' ] .= $v ;
}
} else {
$this -> vars [ $name ] = "" ;
}
return $this ;
}
public function fileRead( $tpl ) {
if ( $this -> need_compilate == 0) return ;
$handler = @ fopen ( $tpl , 'rb' ) ; return $contents ;
}
public function parse( $tpl ) {
if ( $this -> need_compilate == 0) return '' ;
$this -> parse_tpl = $this -> fileRead ( $tpl ) ;
foreach ( $this -> vars as $k => $v ) {
$this -> parse_tpl = str_replace ( $k , $v , $this -> parse_tpl ) ; }
return $this -> parse_tpl ;
}
public function load( $tpl ) {
if ( $this -> need_compilate == 0) return $this ;
$this -> content = $this -> fileRead ( $tpl ) ;
return $this ;
}
public function out_content( ) {
if ( $this -> need_compilate == 1) {
foreach ( $this -> vars as $key => $val ) {
$this -> content = str_replace ( $key , $val , $this -> content ) ; }
$handler = fopen ( $this -> cache_name , 'a+' ) ; flock ( $handler , LOCK_EX
) ; fwrite ( $handler , $this -> content ) ; flock ( $handler , LOCK_UN
) ; $this -> LoadFromCache ( ) ;
} else {
// Load from cache
$this -> LoadFromCache ( ) ;
}
}
private function LoadFromCache( ) {
$this -> engine [ 'engine' ] = $this -> engine ;
include_once ( $this -> cache_name ) ;
}
private function cache_expired( ) {
if ( $this -> cache_exists ( ) ) {
if ( ( $ftime + $this -> cache_expired ) <= time ( ) ) return true ;
else
return false ;
}
return true ;
}
private function cache_exists( ) {
}
private function getkey( $key ) {
}
}
Я сам для таких целей писал. Что делает этот класс, он загружает шаблоны, парсит макросы {*} на соотвествующий файл, собирает полученную страницу в один большой файл, сохраняет его в кэш, чтоб каждый раз не парсить и потом если надо загружает из кэша.
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
$TPL = new Tpl( $controller . '/' . $action ) ; // Экземпляр класса шаблонов, в конструкторе указываем ему уникальный ключ, на случай если шаблон будем грузить из кэша
$TPL -> load ( 'template/admin/index.tpl' ) // Загружаем главную страницу
-> set ( 'header' , $TPL -> parse ( 'template/admin/header.tpl' ) ) // Парсим макросы
-> set ( 'leftside' , $TPL -> parse ( 'template/admin/leftside.tpl' ) )
-> set ( 'content' , $TPL -> parse ( 'template/admin/pages/' . $action . '.tpl' ) )
-> set ( 'footer' , $TPL -> parse ( 'template/admin/footer.tpl' ) )
-> merge ( array ( 'id' => 1 , 'username' => 4 ) ) // Создаем переменные, которые будут доступны в шаблоне -> out_content ( ) ; // Выводим контент.
Вообщем как-то так.
sKaa
Отправлено: 23 Ноября, 2011 - 05:44:42 • Тема: как сделать музыкальный плеер для сайта, работающий после перехода по страницам? • Форум: Вопросы новичков
Ответов: 7 Просмотров: 287
Да там не нужно ниче изучать, там одна функция нужна.
Если через jQuery то как-то так:
Index.html
CODE (
html ):
скопировать код в буфер обмена
<!DOCTYPE html>
<html xmlns= "http://www.w3.org/1999/xhtml" >
<head >
<script src = 'js/jQuery.js' ></ script >
</ head >
<body >
<a href = '#' class = 'qwe' > Ajax button </ a >
<div class = 'asd' > </ div >
<script >
$('.qwe').bind('click', function() { $.get('qwe.php', function(e){ $('.asd').html(e);}); });
</ script >
</ body >
</ html >
qwe.php :
(Добавление)
скачать jQuery можно на jQuery.com
Страниц (65): В начало « ... 54 55 56 57 [58] 59 60 61 62 ... » В конец
Powered by ExBB FM 1.0 RC1. InvisionExBB