什么是围绕javascript包装这个PHP循环的正确方法

时间:2010-03-21 19:27:50

标签: php javascript wordpress google-maps

我正在将Google Maps 2脚本与Wordpress循环混合在一起,因此有一个用于地图数据的CMS平台。我有这个工作正常:

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中的字段中提取出来吗?因此,lat / long和title也可以在182个字段中设置。

3 个答案:

答案 0 :(得分: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 :(得分:0)

摆脱所有echo并以此方式实现:

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

答案 2 :(得分: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语法错误,因此请确保为您将变量插入的任何内容转义相应的引号。