2010-03-21 140 views
0

我将Google Maps 2脚本与Wordpress循环混合在一起,以便为地图数据提供CMS平台。我有这个工作的罚款:什么是包装这个PHP循环的正确方法javascript

var point = new GLatLng(48.5139,-123.150531); 
var marker = createMarker(point,"Lime Kiln State Park", 
'<?php $post_id = 182; 
$my_post = get_post($post_id); 
$mapTitle = $my_post->post_title; 
$mapIMG = get_post_meta($post_id, 'mapImage', true); 
$snip = get_post_meta($post_id, 'mapExcerpt', true); 
echo "<div class=\"span-12\">"; 
echo "<div class=\"mapTitle\">"; 
echo $mapTitle; 
echo "</div>"; 
echo "<img class=\"mapImage\" src=\""; 
echo bloginfo('url'); 
echo "/wp-content/files_mf/"; 
echo $mapIMG; 
echo "\" /> "; 
echo "<div class=\"mapContent\">"; 
echo $snip; 
echo "</div>"; 
echo "<div class=\"moreLink\">"; 
echo "<a href=\""; 
echo $permalink = get_permalink($post_id); 
echo "\">Find out more &raquo; </a>"; 
echo "</div>"; 
echo "</div>"; 
?>') 
map.addOverlay(marker); 

但是我希望还能够包括两个变量在PHP循环中的开始,使这两个都可以用自定义字段中产生。有人可以告诉我,写这个的正确方法是,所有的数据都可以从该帖子ID中的字段中拉出来吗?所以经纬度和标题也可以在帖子182字段内设置。

回答

1

我想我明白你问什么。我认为帮助你的最重要的事情就是看你的编码习惯。可读性非常重要。例如,尽量不要将php与输出混合太多。首先执行php,然后进一步浏览页面,然后在需要的地方回显您准备好的变量。它使事情变得更容易阅读。另外,单引号是你的朋友。

我相信这能解决你的问题:






<?php 
$post_id = 182; 
$my_post = get_post($post_id); 
$mapTitle = $my_post->post_title; 
$mapIMG = get_post_meta($post_id, 'mapImage', true); 
$snip = get_post_meta($post_id, 'mapExcerpt', true); 
$permalink = get_permalink($post_id); 

// Is this what you mean?? 
$lat = $my_post->post_lat; 
$long = $my_post->post_long; 

$pass_to_function = ' 
    <div class="span-12"> 
     <div class="mapTitle">'.$mapTitle.'</div> 
     <img class="mapImage" 
      src="'.bloginfo('url').'/wp-content/files_mf/'.$mapIMG.'" /> 
     <div class="mapContent">'.$snip.'</div> 
     <div class="moreLink"> 
      <a href="'.$permalink.'">Find out more &raquo; </a> 
     </div> 
    </div>'; 

?> 

var point = new GLatLng(<?php echo $lat.', '.$long; ?>); 
var marker = createMarker(point,"<?php echo $mapTitle; ?>", '<?php echo $pass_to_function; ?>') 
map.addOverlay(marker); 
+1

我甚至不会使用多行变量赋值。 heredoc的FAR更具可读性,特别是如果您必须在赋值语句和/或插值变量中开始转义引号。 – 2010-03-21 21:36:25

+0

你可能是对的。关于heredoc语法的一些事情曾经刺激过我,但是那时我很缺乏经验。也许我会再试一次,看看这次我是否更喜欢它。 – 2010-03-22 00:58:33

+0

感谢您的回应,我尝试了您的代码,但语法有问题。我怀疑是因为我在javaScript的中间调用了这个,所以我的代码有点奇怪,所有的回声都是这样,这是我唯一能够使它工作的唯一方法。我将继续嘲笑你所拥有的东西在这里,看看我能否得到任何工作。 – Zac 2010-03-22 03:36:16

0

摆脱所有echo S和做出这样说:

$snip = get_post_meta($post_id, 'mapExcerpt', true); 
?> 
<div class="span-12"> 
<div class="mapTitle"> 
<?=$mapTitle?> 
</div> 
...etc 
+0

我不明白这将如何工作,因为我将从大约20个不同的职位id身上拖拽,但是相同的字段'mapExcerpt'等将被拉入每个ID中。我不得不把他们全部封装在一个循环中,以便正确的字段被拉为该ID? – Zac 2010-03-21 20:00:39

0

我会做这个作为一个评论,但没有编码格式化那里,所以......

” ......我要从大约20个不同的职位ID拉...“

这些职位ID是如何检索?从数据库?什么数据被拉?我在猜测纬度/经度,标记名称和标记的ID,对吧?如果是这样的话,那么类似这样的事情会起作用:

$sql = "SELECT id, lat, long, name FROM table..."; // whatever it would be 
$res = mysql_query($sql); 

while($row = mysql_fetchrow_array($res)) { 
    $title = get_title($row['id']); 
    $img = get_Post_Meta($row['id']); 
    // and populate more variables for whatever data you need 

    // start a heredoc 
    echo <<<EOF 
var point = new GLatLng({$row['lat']},{$row['long']}); 
var marker = createMarker(point,"{$row['name']}", ' 
    <div class="this"> 
     <div class="that"> 
      {$title} <img src="{$img}" /> 
     </div> 
    </div> 
'; 

EOF; 
    } // end of while loop 

只要记住清理任何你插入为Javascript代码的文本。如果(比如说)标记的名称包含相同类型的引号,那么它会导致JavaScript语法错误,因此无论您将变量插入哪个变量,都要确保为相应的引号进行转义。

+0

我想也许我的问题并不清楚我想要完成什么。我正在使用Wordpress平台,并尝试从数据库中的帖子编辑器中拉出自定义字段,并将它们插入用于为Google地图提供动力的JavaScript。我对你的回应有点失落,但是谢谢,我会看到我能用它做什么,并希望能学到一两件事! – Zac 2010-03-22 03:39:24

相关问题