serializarea anumitor campuri din pagina si trimitearea acestoara pe server

Folosind jQuery, se poate face minuni, asta stim cu totii 🙂

o noua minune descoperita de mine este urmatoarea:

am nevoie sa trimit catre server anumite campuri din pagina, o parte dintr-o forma, o parte din afara ei.
ce trebuie sa fac?

1) definesc o clasa pentru acele campuri, ca sa-i pot sa identific
ex:
< input type="text" name="first_name" class=”edit_field” value=”” / >

2) folosind functia .serializeArray() din libraria lui jQuery pentru a serializa rezultate in formatul JSON.

3) folosind ajax tot de la jQuery trimit parametrii serializati catre server, folosind metoda GET/POST

exemplu:

< script >
var fields = $(".edit_field").serializeArray();
// do update via ajax
$.ajax({
    type: "POST",
    url: "/users/update/",
    data:fields,
    success: function(data){}
});
< /script >

Rewrite url

Rewriting urls in Asp.Net is not a complicated thing if you remember some basic steps:
1. Any request will first go to Application_BeginRequest from Global.asax
2. Your online store must be designed in an easy way:
– categories must be unique by name
– subcategories must be unique by name in the same category (The pair category-subcategory must be unique)
In this way you can have as many levels as you want.

Using this advices, you will have a function that helps your users navigate through levels of categories.
protected void Application_BeginRequest(Object sender, EventArgs e)
{

string fullOrigionalpath = Request.Url.ToString();
string filePath = Request.FilePath.ToString();

if (filePath.ToLower().Contains(“sitemap.html”))
{

//if you have a custom sitemap
HttpContext.Current.RewritePath(Generics.HTTP.AppPath + “Sitemap.aspx”, false);

}
//Generics.Constants.Page_EXT in this case is “.html”
filePath = filePath.Replace(Generics.Constants.Page_EXT, string.Empty);
string originalFilePath = filePath;

string path = Generics.HTTP.AppPath;

//HERE you add your code
//first you can check if filePath  contains a product id. In this case:

path+=”Products.aspx?id_products=”+id_product;

//if filePath is not a product page, than you check your categories
Category categ=Utility.GetCAtegoryByFriendlyName(filePath);
path+=”Category.aspx?id_category=”+categ.id;

//finally you need to rewrite path as needed
HttpContext.Current.RewritePath(path, false);

}

Fun with popups

Let’s say we have something like the next scenario:
1. We have a popup window for editing a record.
2. We need to select a value from a complex list of records, so we need another popup for this select.

Problem:
Our second popup is bigger then the first one, so we need to open it from our main page.
By now, we manage to do this really easy. The main issue is when trying to pass the selected value from the second popup to first one. Remeber that we opened it from the main page.

Solution:

In the first popup we will have a function for opening the second popup.
In this function we set a var childPage from the main page as a reference to our first popup.

function openPopup(){

window.parent.setHiddenPageChild(window);
window.parent.OpenModalWindow(params);


}

On the main page we have the setHiddenPageChild function

var childPage;
function setHiddenPageChild(child){

childPage=child;

}

and setRecordFromResponse function that will pass the selected value from the second popup to the first one.
This function will be called from the second popup like this: window.parent.setRecordFromResponse(response)

function setRecordFromResponse(response){

childPage.UseSelectedRecord(response);
//childPage served us well, so we will let it retire
childPage=null;

}

Response is the value selected in the second popup. It can be an id, a value or an object.
Now we use childPage that was initialized at a previous step. This is how we can have access to the functions of the first popup

jQuery datetime picker problem

Some days ago I run into the following problem with jQuery’s datetime picker.

I have a form that contain a input field that I populate with a date/time picker.  If you populate the form on the server with some default values, the jQuery’s hidden fields wont get set unless you do some action on the calendar.

The  solution  is to add inline:true to its options like this:

$(“#myDate”).datepicker({

inline: true,
dateFormat: ‘yy-mm-dd’

});

non-breaking space in MIME encoded, quoted-printable text

in emailurile encodate cu quoted-printable apare un caracter “space” care nu poate fi parsat nici de php nici de C#, acesta reprezinta codul “=C2=A0” in bytes “C2 A0”.

UTF-8 il translateaza in 00A0.

ca sa scapam de acest caracter trebuie sa-l decodam folosind functia “quoted_printable_decode” si apoi sa eliminam sir de caractere “=C2=A0” sau “\xC2\xA0”

mai multe informatii gasiti aici

Nice jQuery Popup Modal Dialog Plugin

One of the best jQuery plugins to display a popup modal window is fancybox

The usage is simple:

$(“.popup”).fancybox();
$.fancybox.resize();

and make sure your link has popup class. It will load the page pointed by your link href and resize as needed.

What if you display a form in the popup and want to reload it with an success message? Use this: $(‘#fancybox-content’).html(data); where data is the content you want to show in popup.

For example, using ajax to submit the form:

$.ajax({
url: ‘exemple.com’,
data: $(‘#form1’).serialize(),
type: ‘post’,
cache: false,
dataType: ‘html’,
success: function (data) {
$(‘#fancybox-content’).html(data);
$.fancybox.resize();
},
error:function (e,data) { alert(e); }
});

PHP – create class properties at runtime

How to dynamically create  in PHP a property for an object?

If the object  is $foo you use this syntax: $this->{$property} = ‘a value’;

For example:

<?php

class foo {

public function setProperty($n, $v)
{
   $this->{$n} = $v;
}

}

$foo = new foo();
$foo->setProperty('property1','value1');
echo $foo->property1; //will display value1
?>

Jquery Calendar with time picker and translation of the content

The timepicker addon adds a timepicker to jQuery UI Datepicker, thus the datepicker and slider components (jQueryUI) are required for using any of these.

To create your own regional objects per region, use the setDefaults method to tie these together. Setting datepicker and timepicker regionals separtely will help ensure proper wording when only using datepicker or timepicker. Here is an example:

$.datepicker.regional[‘ru’] = {
closeText: ‘Закрыть’,
prevText: ‘<Пред', nextText: 'След>‘,
currentText: ‘Сегодня’,
monthNames: [‘Январь’,’Февраль’,’Март’,’Апрель’,’Май’,’Июнь’,
‘Июль’,’Август’,’Сентябрь’,’Октябрь’,’Ноябрь’,’Декабрь’],
monthNamesShort: [‘Янв’,’Фев’,’Мар’,’Апр’,’Май’,’Июн’,
‘Июл’,’Авг’,’Сен’,’Окт’,’Ноя’,’Дек’],
dayNames: [‘воскресенье’,’понедельник’,’вторник’,’среда’,’четверг’,’пятница’,’суббота’],
dayNamesShort: [‘вск’,’пнд’,’втр’,’срд’,’чтв’,’птн’,’сбт’],
dayNamesMin: [‘Вс’,’Пн’,’Вт’,’Ср’,’Чт’,’Пт’,’Сб’],
weekHeader: ‘Не’,
dateFormat: ‘dd.mm.yy’,
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ”
};
$.datepicker.setDefaults($.datepicker.regional[‘ru’]);

$.timepicker.regional[‘ru’] = {
timeOnlyTitle: ‘Выберите время’,
timeText: ‘Время’,
hourText: ‘Часы’,
minuteText: ‘Минуты’,
secondText: ‘Секунды’,
millisecText: ‘миллисекунды’,
currentText: ‘Теперь’,
closeText: ‘Закрыть’,
ampm: false
};
$.timepicker.setDefaults($.timepicker.regional[‘ru’]);

$(‘#example4’).datetimepicker({
timeFormat: ‘h:m’,
separator: ‘ ‘
});

documentation here

pagination on google custom search

in the google custom search results pagination will not keep the number of page just visited,
for example if you go to the page 3 and go back via browser button you will get results from the first page.

To keep visited page some custom modifications should be implemented:

step 1:
In the function searchCompleteCallback(), we need to add to all links parameter &page= with calculated page counter

ex:

if(back_page == '')
 back_page = 0;
else
 back_page = (back_page*10)-10;

with javascript append all links with this parameter.

…’&page=’+back_page;

step 2:

in the function google.setOnLoadCallback(function(){ set the parameter with google custeom search key,to use this application, and concatinate parameter with page number

var customSearchControl = new google.search.CustomSearchControl(‘gcs_customer_key’+’&start=’.$_GET[‘page’]);

This will point the results from the google custom serach to the right page number.