2010-03-02 4 views
0

У меня есть подписка на странице, которую могут использовать зарегистрированные пользователи.jQuery подписка link toggle

Toggling ссылку на странице не проблема, так как я могу сделать .POST и эхо, что РНР возвращает

if ($subscription == true) { 
    echo 'Subscribed'; 
} else { 
    echo 'Click to subscribe'; 
} 

Однако то, что ошибки мне, что я должен написать тот же кусок кода в файле шаблона. Тем не менее, я мог бы сделать ajax-вызов для этого сразу после загрузки страницы.

Каков наилучший способ сделать это?

ответ

0

Хорошо, я решил исправить это с помощью PHP. Теперь, когда вы нажмете на странице он призывает:

http://url/module/controller/check/id/ $ ID/объект/$ object_name

и ajax'd его в моих дела. Затем, если ее нажали он идет и помещает возвращаемое значение в HTML

http://url/module/controller/toggle/id/ $ ID/объект/$ object_name

Класс:

<?php 


class User_SubscriptionController extends Zend_Controller_Action { 


function init() { 
    $contextSwitch = $this->_helper->getHelper('ForceContext'); 
    $userSess  = new Zend_Session_Namespace('User'); 
    $this->user  = $userSess->model; 

    $this->id   = $this->_getParam('id'); 
    $this->object_name = $this->_getParam('object'); 

    if (empty($this->id) || empty($this->object_name)) { 
     throw new exception('Id and Object name must be passed'); 
    } 

} 


public function checkAction() { 

    $subscription = Eurocreme_Baseclass::load_by_fields(array('object_name' => $this->object_name, 'object_id' => $this->id, 'user_id' => $this->user->id, 'table_name' => 'Subscription'), 1); 

    if (is_object($subscription)) { 
     echo 'Click To Un-Susbscribe'; 
    } else { 
     echo 'Click To Subscribe'; 
    } 
    exit; 
} 


public function toggleAction() { 

    $subscription = Eurocreme_Baseclass::load_by_fields(array('object_name' => $this->object_name, 'object_id' => $this->id, 'user_id' => $this->user->id, 'table_name' => 'Subscription'), 1); 

    if (is_object($subscription)) { 
     $subscription->delete(); 
    } else { 
     $subscription = Eurocreme_Baseclass::create(array('object_name' => $this->object_name, 'object_id' => $this->id, 'user_id' => $this->user->id, 'table_name' => 'Subscription', 'frequency' => 1)); 
    } 

    $this->checkAction(); 
} 

}

и коды мнения :

<?php $this->headScript()->captureStart(); ?> 
$('document').ready(function() { 

    $.get('/user/subscription/check/id/<?php echo $this->object->id; ?>/object/Movie', function(data) { 
     $('#subscription_link').html(data); 
    }); 

    $("#subscription_link").click(function(){ 
     $.get('/user/subscription/toggle/id/<?php echo $this->object->id; ?>/object/Movie', function(data) { 
      $('#subscription_link').html(data); 
     }); 
     return true; 
    }); 


}); 
<?php $this->headScript()->captureEnd(); ?>