Переключение ссылки подписки jQuery - PullRequest
0 голосов
/ 02 марта 2010

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

Переключение ссылки на странице не проблема, так как я могу сделать .post и вывести то, что PHP возвращает

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

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

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

1 Ответ

0 голосов
/ 02 марта 2010

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

http://url/module/controller/check/id/$id/object/$object_name

и ajax'd это в мой div. Затем, если его щелкнуть, он идет и помещает возвращаемое значение в HTML

http://url/module/controller/toggle/id/$id/object/$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(); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...