2012-01-02 35 views
3

我試圖根據訪問者的屏幕大小自動切換WordPress的背景圖片。如果他/她有一個大屏幕,他/她會得到大版本的圖像。如果屏幕很小,他/她會得到較小的版本。 (只是加載時間減少。圖像將被調整到事後佔滿整個屏幕,但是這已經工作。)在javascript「if」中錯誤地使用php?

什麼不工作是檢查羯羊或不較小的版本,甚至存在。如果它不存在,腳本應該回退到更大的版本,並使用該圖像。我得到一個背景圖片,但它只是一個大圖片(wordpress字段名稱「BG_value」,小圖片的url存儲在「BG_value-medium」中)。

的圖像確實存在,通過WordPress的領域傳遞的路徑也很好,所以這是沒有問題的。 :/

但是,事不宜遲,我介紹你的代碼(從我的header.php來自WordPress的)。

<body> 
<!-- Wordpress Loop --> 
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
     <script type="text/javascript"> 
     if (($(window).width() < 1340) && (<?php 
               if(file_exists(bloginfo('template_url').get_post_meta($post->ID, 'BG_value-medium', $single = true))){ 
                echo "true"; 
               }else{ 
                echo "false"; } ?>)){ 
      <?php $bgimg = get_post_meta($post->ID, 'BG_value-medium', $single = true); ?> 
     } else { 
      <?php $bgimg = get_post_meta($post->ID, 'BG_value', $single = true); ?> 
     } 
     </script> 
    <div id="bgimage"> <img class="stretch" src="<?php bloginfo('template_url'); ?><?php echo $bgimg; ?>" alt="" /> </div> 
<?php endwhile; endif; ?> 

我很抱歉,如果這看起來有點亂,我一直工作在這最後幾個小時,一遍遍地改變它。

任何想法是怎麼回事錯在這裏? Check out the page

+3

+1爲了解釋你想要做什麼,你嘗試了什麼,並鏈接到一個例子。很好的問題,雖然錯誤的觀念有點陳詞濫調! – phihag 2012-01-02 18:33:18

+0

上有 – Rafay 2012-01-02 18:36:34

回答

4

你在這一個大的邏輯上的錯誤。你想用javascript函數設置bg圖像,但是你永遠不要試圖用javascript設置它,只能用php echo。在瀏覽器中查看此JavaScript代碼段的源代碼,您將看到我的意思。

您應該將圖像路徑存儲在thenelse內的JavaScript變量中,然後使用它們設置bg圖像。

未經測試:

<script type="text/javascript"> 
    if (($(window).width() < 1340) && (<?php if(file_exists(bloginfo('template_url').get_post_meta($post->ID, 'BG_value-medium', $single = true)))){ 
               echo "true"; 
              }else{ 
               echo "false"; } ?>)){ 
     var bgimage="<?php echo get_post_meta($post->ID, 'BG_value-medium', $single = true); ?>"; 
    } else { 
     var bgimage="<?php echo get_post_meta($post->ID, 'BG_value', $single = true); ?>"; 
    } 

    document.getElementById("bgimageimg").src=bgimage; 
</script> 

<div id="bgimage"><img id="bgimageimg" class="stretch" src="" alt="" /></div> 
+1

一頁OP JavaScript語法錯誤:我勸你呈現瀏覽器頁面,看看產生源(CTRL-U在大多數瀏覽器)。你應該立即發現BloodyWorld提到的錯誤。 – 2012-01-02 18:58:04

+0

Aw基督,我沒有得到你的意思,直到我檢查了源代碼。顯然,我需要學習很多東西。我試圖通過javascript設置一個php var,隨後將其作爲路徑回顯出來。我會盡量明天從你的代碼中學習,並讓你知道它是如何發生的。 – 2012-01-02 19:00:40

2

我試圖清理爛攤子,看看發生了什麼。以下是未經測試的,但如果某件事不起作用,您現在可以至少了解它爲什麼不起作用。

<?php 

if (have_posts()) { 
    while (have_posts()) { 
     the_post(); 

     echo '<script type="text/javascript">'; 

     $url = bloginfo('template_url'); 
     $img = get_post_meta($post->ID, 'BG_value-medium', $single = true); 
     $file_exists = 'false'; 
     if (file_exists($url.$img)) { 
      $file_exists = 'true'; 
     } 

     echo 'var bgimg = '.get_post_meta($post->ID, 'BG_value', $single = true).';'; 
     echo 'if ($(window).width() < 1340 && '.$file_exists.') {'; 
     echo ' bgimg = '.get_post_meta($post->ID, 'BG_value-medium', $single = true).';'; 
     echo '}'; 

     echo '$("#bgimage").attr("src", bgimg);'; 

     echo '</script>'; 
    } 
} 

?> 
+0

非常性感! (晚)新年解決方案:始終保持清潔的代碼。 – 2012-01-03 07:33:53

+1

唯一的問題是,在這種情況下,每個帖子都會設置bg-image。洞javscript的東西應該在'while()'之外。每頁設置一次就足夠了;) – Corubba 2012-01-03 10:50:33

+0

@BloodyWorld我認爲你是對的。至少現在不難做出必要的改變。而且這樣可以更方便地維護。我也想知道'the_post();'做了什麼。也許顯示帖子?以及OP可以修復自己:) – PeeHaa 2012-01-03 15:45:17