2010-03-21 4 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, так что оба эти также могут быть получены с помощью пользовательских полей. Может кто-нибудь, пожалуйста, покажите мне, что правильный способ написать это будет так, чтобы все данные могли быть извлечены из полей внутри этого идентификатора сообщения? Таким образом, lat/long и title также могут быть установлены из полей post 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 более читаемым, особенно если вам нужно начать избегать кавычек в инструкции присваивания и/или интерполировать переменные. –

+0

Возможно, вы правы. Что-то вроде синтаксиса heredoc раздражало меня, но это было тогда, когда я был очень неопытен. Возможно, я попробую еще раз и посмотрю, понравится ли мне на этот раз лучше. –

+0

Спасибо за ответ, я попробовал ваш код, однако в синтаксисе что-то не так. Я подозреваю, потому что я нахожу это в середине javaScript, поэтому мой код немного странный со всеми эхами. Это был единственный способ заставить его работать. Я продолжу обезвреживание с тем, что у вас есть здесь и посмотрим, смогу ли я заставить работать. – Zac

0

Избавьтесь от всех echo с и сделать это таким образом:

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

Я не понимаю, как это будет работать, поскольку я собираюсь вытащить из примерно 20 разных идентификаторов почты, но те же поля, «mapExcerpt» и т. Д., Будут втянуты для каждого из них. Dont я должен иметь их все заключенные в петлю, так что правильные поля вытягиваются для этого идентификатора? – Zac

0

Я бы сделать это в качестве комментария, но нет верстки кодирования там, так что ...

»... Я собираюсь вытягивать из примерно 20 различных почтовых идентификаторов ... »

Как извлекаются эти идентификаторы почты? Из базы данных? Какие данные вытягиваются? Я предполагаю широту/долготу, имя маркера и идентификатор маркера, правильно? Если это так, то что-то подобное будет работать:

$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 и пытаюсь вытащить пользовательские поля, написанные из редактора сообщений из базы данных, и подключить их к javascript, используемому для включения карты google. Я немного потерял ваш ответ, но спасибо, я посмотрю, что я могу с этим сделать, и, надеюсь, узнаю кое-что! – Zac

Смежные вопросы