2010-01-11 33 views
0

我想讓我的網站的用戶,上傳圖片,然後選擇一個是後面的圖像,上傳工作正常,但我的控制器有問題或查看我想,我將不勝感激一些可以幫助我,PHP和jquery,幫助傳遞PHP變量爲javascript

VIEW:

<div id="background-select"> 
<?php 
$count = 0; 
    if(isset($special)) { 
     foreach ($special as $row) { 
      print '<div class="select">'; 
       print "<a class='background_btn' href='index.php/home/set_background/".$row['background_id']."'>$count</a>"; 
      print '</div>'; 

       $background = $row['background_name']; 
       echo $background; 

     } 
    } 
    if(isset($generic)) { 
     foreach ($generic as $row) {  
      print '<div class="select">'; 
       print "<a class='background_btn' href='index.php/home/set_background/".$row['background_id']."'>$count</a>"; 
      print '</div>'; 
       $background = $row['background_name']; 
       echo $background; 

      } 

     } 

    if(isset($user_background)) { 
     foreach ($user_background as $row) { 
      print '<div class="select">'; 
       print "<a class='background_btn' href='index.php/home/set_background/".$row['background_id']."'>$count</a>"; 
      print '</div>'; 
       $background = $row['background_name']; 
       echo $background; 
      } 

     } 
?> 
</div> 
<script type="text/javascript"> 
$("a.background_btn").click(function(ev){ 
ev.preventDefault(); 
alert("hello"); 
var url = $(this).attr("href"); 
alert(url); 
$.ajax ({ 
    url : url, 
    type: "POST", 
    success : function (html) { 
     alert("<?php echo $background; ?>") 
     $('#wrapper').css('background', 'url(/media/uploads/backgrounds/<?php echo $background; ?>)'); 
    } 
}) 
}); 
</script> 
<div id="wrapper"> 

控制器:

public function set_background() { 
     $this->load->model('image_model'); 
     if($query = $this->image_model->get_background_by_id($this->uri->segments[3])) { 
      //die(var_dump($query)); 
      foreach ($query as $row) { 
       $data['background'] = $row['background_name']; 
      } 
     } 
     $this->load->view('template/background-select', $data); 
    } 

的問題是,我可以將背景設置爲僅杉例如,如果第一個循環返回$ background到= red.png,那麼我不能得到任何東西,但只有red.png加載英寸返回值。

任何人都可以建議一個解決方案嗎?

回答

1

您似乎使用AJAX加載背景。但是,您在初始請求中設置了$ background的值,並且您的AJAX調用的「成功」方法從不使用返回的HTML。只有在頁面首次加載時最初設置的背景。你應該確保你的AJAX調用返回背景,所以你可以在你的javascript中使用它。不要嘗試使用PHP在「成功」方法中設置背景。

另外,雖然不確定,但是你的控制器似乎設置了一個單獨的屬性$ data ['background'],覆蓋了foreach的每一次迭代,而不是創建一個數組或hashmap。

+0

這是正確的,我使用AJAX的背景圖像加載,我想我跟着你的意思,但一個代碼示例將非常有幫助,因爲我認爲它比renamin更復雜一些變量?如果我沒有在我的成功方法中設置背景,我該怎麼辦?如何? – Udders 2010-01-11 10:40:39

+0

製作一個php頁面或控制器,它接收您要設置的背景的ID,並讓它返回一個空白頁面,其中包含'red.png'或類似內容。然後,在你的成功方法中,'red.png'將成爲方法的參數,所以你可以使用它來設置背景。 我不知道使用的MVC方法給你一個完整的例子...對不起:-) – 2010-01-11 11:54:27

0

我認爲你應該保持獨立的PHP和JS。完成上傳過程後,您可以重定向(或通過使用AJAX動態顯示)上傳的圖像頁面。用戶點擊上載的圖像後只需要改變的背景屬性,也許是這樣的:

<div id="back"> 
    <img src="foo.jpg" alt="..." /> 
    <img src="bar.jpg" alt="..." /> 
    ... 
</div> 

$(function(){ 
    $("#back img").bind("click", function(e){ 
     var src = $(this).attr("src"); 
     $("#back").css({"background-image": "url(/images/" + src + ")"}); 
    }); 
});