Используйте jQuery для обновления базы данных через компонент Joomla MVC - PullRequest
3 голосов
/ 21 октября 2010

Я занимаюсь разработкой новой версии моего компонента Joomla TTVideo.Я пытаюсь настроить систему рейтинга с помощью плагина jQuery stars.У меня проблема с jQuery noconflict решена, однако я немного запутался в том, как отправить голос безопасно вспомогательному классу, который обновляет базу данных значением голоса.

Обычно это делается с помощью внешнего скрипта, доступ к которому осуществляется только по запросу ajax.Я хотел бы сделать это так, чтобы он был включен в мой компонент, и таким образом, чтобы переменные std Joomla были доступны для вспомогательного класса, например, getDBO () и ссылка на базу данных #__ table_name.как этого добиться, будет с благодарностью.Спасибо.

1 Ответ

4 голосов
/ 23 октября 2010

Это довольно просто.

Во-первых, вам нужно создать контроллер со специальной задачей, которая будет обрабатывать ваше обновление рейтинга. Чтобы сделать это безопасно, проверьте токен! Токен будет поставляться с AJAX-запросом.

Рассмотрим этот пример

function rate() {
    // Check for request forgeries
    JRequest::checkToken() or jexit('Invalid Token');

    //  Get ID of item
    //  update rating, etc...
}

Во-вторых, создайте свой AJAX-запрос в представлении, явно вызванном каким-либо действием. Не забудьте отправить ваш запрос как POST, потому что вы собираетесь записывать данные ... Вы можете либо иметь свой скрипт во внешнем документе, получить значения из HTML-документа (id, токен, URL и т. Д., Которые находятся в скрытых входах), либо вы можете сгенерировать javascript с помощью PHP и включить его в заголовок (как в примере ниже). *

<?php
//
$url = JRoute::_('index.php?option=my_component&controller=my_controller');
$token = JUtility::getToken();  //  <-  Session token
$id = 101;  //  <-  YOUR ID

//  This will add the request to the head of the document, instead of somewhere in the document
JFactory::getDocument()->addScriptDeclaration("
    .ajax({
        type: 'POST',
        url: $url,
        data: {
            '$token': '1', // <-- THIS IS IMPORTANT
            'task': 'rate',
            'id':  $id
        },
        success: youSuccessFunction
    }); 
");
?>

Возможно, вам придется изменить несколько вещей, но это идея AJAX в MVC.

ПРИМЕЧАНИЕ: Вы также можете позвонить JRequest::checkToken('get'), и это проверит токен в URL. Это полезно для вызовов AJAX, которые читают данные.

...