jQuery.extend({
serialize: function( mixed_value ) {
// http://kevin.vanzonneveld.net
// + original by: Arpad Ray (mailto:arpad@php.net)
// + improved by: Dino
// + bugfixed by: Andrej Pavlovic
// + bugfixed by: Garagoth
// + input by: DtTvB (http://dt.in.th/2008-09-16.string-length-in-bytes.html)
// + bugfixed by: Russell Walker
// % note: We feel the main purpose of this function should be to ease the transport of data between php & js
// % note: Aiming for PHP-compatibility, we have to translate objects to arrays
// * example 1: serialize(['Kevin', 'van', 'Zonneveld']);
// * returns 1: 'a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}'
// * example 2: serialize({firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'});
// * returns 2: 'a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}'
var _getType = function( inp ) {
var type = typeof inp, match;
var key;
if (type == 'object' && !inp) {
return 'null';
}
if (type == "object") {
if (!inp.constructor) {
return 'object';
}
var cons = inp.constructor.toString();
match = cons.match(/(\w+)\(/);
if (match) {
cons = match[1].toLowerCase();
}
var types = ["boolean", "number", "string", "array"];
for (key in types) {
if (cons == types[key]) {
type = types[key];
break;
}
}
}
return type;
};
var type = _getType(mixed_value);
var val, ktype = '';
switch (type) {
case "function":
val = "";
break;
case "undefined":
val = "N";
break;
case "boolean":
val = "b:" + (mixed_value ? "1" : "0");
break;
case "number":
val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
break;
case "string":
val = "s:" + encodeURIComponent(mixed_value).replace(/%../g, 'x').length + ":\"" + mixed_value + "\"";
break;
case "array":
case "object":
val = "a";
/*
if (type == "object") {
var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
if (objname == undefined) {
return;
}
objname[1] = serialize(objname[1]);
val = "O" + objname[1].substring(1, objname[1].length - 1);
}
*/
var count = 0;
var vals = "";
var okey;
var key;
for (key in mixed_value) {
ktype = _getType(mixed_value[key]);
if (ktype == "function") {
continue;
}
okey = (key.match(/^[0-9]+$/) ? parseInt(key, 10) : key);
vals += $.serialize(okey) +
$.serialize(mixed_value[key]);
count++;
}
val += ":" + count + ":{" + vals + "}";
break;
}
if (type != "object" && type != "array") {
val += ";";
}
return val;
}
});
code:
class dotPlantAdminAction extends CAction
{
/**
* Constructor.
* Runs CAction constructor and makes some changes for Admin action type
*/
public function __construct($controller,$id)
{
parent::__construct($controller,$id);
$this->controller->pageTitle = dotPlant::getName() . " - Admin ";
}
public function run()
{
}
}
code: class ActionAdmin extends dotPlantAdminAction
{
public function run()
{
$this->controller->render('admin');
}
}
Здравствуйте. Вот решил поделиться легальным способом обхода ограничений на количество сайтов на хостинге.
Всё что нужно - иметь хостинг хотя бы на один сайт и возможность создавать несколько(или даже неограниченное количество) алиасов для сайта.
Метод основывается на возможностях mod_rewrite Apache.
Вот пример .htaccess файла:
RewriteEngine on
# Главный узел
RewriteCond %{HTTP_HOST} ^mysite\.ru$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Допустим тут всё перенаправляется на index.php
RewriteRule . index.php
RewriteCond %{HTTP_HOST} ^example\.ru$
RewriteCond %{REQUEST_URI} !^/example\.ru/
RewriteRule (.*) /example\.ru/$1
Таким образом, в главной папке нашего сайта лежит содержимое mysite.ru. В этой же папке есть папка example.ru, в которой находится содержимое второго сайта.
Такой метод прошёл на Хостинге "ТаймВэб". К примеру, там можно взять минимальный хостинг на 2 сайта стоимостью всего 120 руб./мес., объемом дискового пространства 1000 Мб и радоваться жизни!
PS: А хостинг, кстати, хороший. Рекомендую!