ENG: I've addapted a JavaScript serialize function by to jQuery. Function works like the same named function in PHP. Be free to use it in your projects. It is especially needed when you want to post Object in AJAX (in jQuery "$.ajax()"). RUS: Я адаптировал JavaScript serialize функцию, написанную Kevin van Zonneveld, для использования с jQuery. Serialize работает также как и одноименная функция в PHP. Она хорошо выручит Вас, если Вы захотите передать в AJAX запросе Объект (JavaScript object).
Example of using: $.serialize({data: 'value'});
Source code:
jQuery.extend({ serialize: function( mixed_value ) { // // + original by: Arpad Ray (mailto:arpad@php.net) // + improved by: Dino // + bugfixed by: Andrej Pavlovic // + bugfixed by: Garagoth // + input by: DtTvB () // + 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; }
Пишу одно прлиожение на Yii Framework. Структура приложения такова, что необходимо разграничить экшены контроллеров(CController) по папкам и сделать их типовыми. Экшены разграничиваются легко. Предположим, что у нас есть ряд экшенов для администрирования. Всем им надо установить какие-либо свойства или же сделать при их вызове какие-то типовые действия. Рассмотрим на примере изменения титла страницы. Вот код моего базового экшена: [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() {
} }
В конструкторе мы сначала вызываем parent::__construct с необходимыми параметрами. Это грубо-говоря идёт инициализация базового CAction.
Допустим у нас есть контроллер SettingsController. И нам нужно сделать его на основе нашего экшена. Создаем папку protected/controllers/Settings/. В ней создаем файл ActionAdmin.php с таким вот кодом: [code]
class ActionAdmin extends dotPlantAdminAction
{
public function run()
{
$this- >controller- >render('admin');
}
}
Видите? Нам достаточно только объявить run() и уже всё готово. При загрузке запустится необходимый нам конструктор базового контроллера с нашими действиями.
Вот по такому принципу я разграничиваю например админку в своей CMS на Yii Framework. Слава PHP пятому!
Выпадающее меню навигации v0.1. Простенькое выпадающее меню на jQuery. Использует модуль категорий для динамической генерации HTML разметки на UL-ах. Реализовано как CWidget. Использовалось: jQuery, CSS, The Gimp для фона и картинок, Yii Framework
Я заметил за собой особеность.Когда я пишу код, я смотрю работает отдельный блок или нет, потом дописываю. И вот когда я уже вроде бы всё дописал и оно должно работать, я ставлю на просмотр, а сам ухожу курить. Прихожу, все работает и я счастливO:-)
иногда я бываю и первым)) хотя мне как то пофиг, если честно
,
, 11.01.2009 в 09:33
когда первый ещё бы)))
,
, 11.01.2009 в 09:54
это прибавляет лишь несколько читателей на BP, но только 1% из них превращается в реальных читателей. да и пишу я откровенное гавно, понятное или линуксоидам или шизоидам.
,
Да, у меня бывает плохое настроение. Но вот я начал работу ещё над сайтом .