BlindElement - Symfony helper

Napisany przez Szymon Sawicki dnia 18 kwietnia 2008, godzina 23:25  Rss do tej wiadomości

Tagi: AJAX + JavaScript + PHP + Symfony + programowanie

Tutaj kod samego Symfony helpera napisany w PHP.

function blindElement($elementName, $params = array())
{
    $elementName = ucfirst($elementName);
    $show_value = 'pokaż';
    $hide_value = 'ukryj';
    $duration = 0.5;
    
    if(isset($params['show_value']))
        $show_value = $params['show_value'];
        
    if(isset($params['hide_value']))
        $hide_value = $params['hide_value'];
    
    if(isset($params['duration']))
        $duration = $params['duration'];
    
    $js = javascript_tag("
        var filter_timeout = null;
        var trigger".$elementName.";

        function blind".$elementName."(elementId, triggerElement)
        {
            trigger".$elementName." = triggerElement;
            if(Element.visible(elementId))
            {
                if (filter_timeout) clearTimeout(filter_timeout);
                filter_timeout = setTimeout('trigger".$elementName.".innerHTML=\'".$show_value."\';', ".($duration*1000).");
                Effect.BlindUp(elementId, {duration:".$duration."});
            }
            else
            {
                if (filter_timeout) clearTimeout(filter_timeout);
                filter_timeout = setTimeout('trigger".$elementName.".innerHTML=\'".$hide_value."\';', ".($duration*1000).");
                Effect.BlindDown(elementId, {duration:".$duration."});
            }
        }
    ");
    return $js;
}

W ten sposób używamy helpera w kodzie:

 <?php echo blindElement('UserFilter', array('show_value'=>'pokaż filtr', 'hide_value'=>'ukryj filtr', 'duration'=>0.5)) ?>

Jak widać nie jest to specjalnie skomplikowane :))

Natomiast tutaj kod JavaScript jaki został generowany przez tego helpera:

		var filter_timeout = null;
		var triggerUserFilter;

		function blindUserFilter(elementId, triggerElement)
		{
			triggerUserFilter = triggerElement;
			if(Element.visible(elementId))
			{
				if (filter_timeout) clearTimeout(filter_timeout);
				filter_timeout = setTimeout('triggerUserFilter.innerHTML=\'pokaż filtr\';', 500);
				Effect.BlindUp(elementId, {duration:0.5});
			}
			else
			{
				if (filter_timeout) clearTimeout(filter_timeout);
				filter_timeout = setTimeout('triggerUserFilter.innerHTML=\'ukryj filtr\';', 500);
				Effect.BlindDown(elementId, {duration:0.5});
			}
		}

jeden komentarz

Napisany przez rad dnia 25 kwietnia 2008, godzina 23:11
dokładnie, takie elementy można zamieścić w wielu przydatnych miejscach na witrynie