is_published Ajax
Полезный хак, можно использовать не только для изменения статуса публиции статьи, я например заюзал ее для активации пользователей, если кому не пришло письмо для активации акка.
Для работы с AJAX используем jQuery. Для этого добавляем в
/backend/config/view.yml следующее javascripts: [jq/jquery.pack.js] или любой имеющуюся у вас библиотеку jQuery.
Затем в /backend/templates/layout.php добавляем такой код
<script>
jQuery(document).ready(function($){
$("body").after("< div id='result_div' >< /div >");
$("#result_div").html("< img style='padding: 20px' src='/images/loading.gif' align='absmiddle' /> обработка...");
$("#result_div").hide();
$("#result_div").css({
"background-color": "#ffffcc",
"opacity": "0.7",
"width": "40%",
"height": "auto",
"font-family": "Arial Tahoma",
"text-align": "center",
"vertical-align": "middle",
"border": "1px solid silver",
"position": "absolute",
"top": "40%",
"left": "30%",
"z-index": "9999"
});
});
< /script>
Изменяем _is_published.php
<center>
echo
link_to(image_tag(sfConfig::get('sf_admin_web_dir')."/images/".
($myObject->getIsPublished() ? 'ok.png' : 'cancel.png'),
array('id' => 'switch_status_'.$myObject->getId())
),
"my_module/switchStatus?id=".$myObject->getId(),
array(
'class' => 'switch_status',
'rel' => 'switch_status_'.$myObject->getId(),
'pic_dir' => sfConfig::get('sf_admin_web_dir')."/images/",
)
);//link to
?>
</center >
Добавлем файл my_module/templates/_list_footer.php
<script>
$(document).ready(function() {
$(".switch_status").each( function (){
$(this).click( function (){
var popupX = Math.round( ($(window).width() - $("#result_div").width()) / 2) ;
var popupY = $(document).scrollTop() + Math.round($(window).height()/2) -
Math.round($("#result_div").height()/2);
$("#result_div").css({top: popupY+"px", left: popupX+"px"});
var pic_dir = $(this).attr("pic_dir")
var pic_id = $(this).attr("rel")
$("#result_div").slideDown("slow");
$.ajax({
type: "POST",
url: $(this).attr('href'),
data: "",
success: function(msg){
var pic_name = (msg == 1 ? "ok" : "cancel") + ".png"
$("#"+pic_id).attr("src", pic_dir + "/" + pic_name)
$("#result_div").slideUp("slow");
}
});//ajax
return false;
})//click
})//each
}); </script>
Добавляем новый метод executeSwitchStatus в модуль my_module
public function executeSwitchStatus($request){ $myObject = xxxPeer::retrieveByPk($this->getRequestParameter('id')); $currentStatus = $myObject->getIsPublished(); $newStatus = ($currentStatus == 1 ? 0 : 1); $myObject->setIsPublished($newStatus); $myObject->save(); $isAjax = $request->isXmlHttpRequest(); if ($isAjax){ return $this->renderText($newStatus); } else { //do something if not AJAX }//if }//change status
Выходит нечто такое =)
