2010-03-21 2 views
0

Je suis en train d'écraser le script Google Maps 2 avec une boucle Wordpress pour qu'il y ait une plateforme CMS pour les données cartographiques. J'ai ce fonctionne bien:Quelle est la bonne façon d'enrouler cette boucle php autour du 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); 

Cependant, j'espère être en mesure d'inclure également les deux variables au début dans la boucle de php afin que ces deux peuvent également être générés par les champs personnalisés. Quelqu'un peut-il me montrer que la bonne façon d'écrire cela serait que toutes les données puissent être extraites des champs de cet identifiant? Ainsi, le lat/long et le titre peuvent également être définis à partir des champs post 182.

Répondre

1

Je pense que je reçois ce que vous demandez. Je pense que la plus grande chose qui vous aiderait à regarder vos conventions de codage. La lisibilité est très importante. Par exemple, essayez de ne pas trop mélanger php avec la sortie. Faites d'abord le php, puis plus bas sur la page, faites écho à vos variables préparées là où vous en avez besoin. Cela rend les choses beaucoup plus faciles à lire. En outre, les guillemets simples sont votre ami.

Je crois que cela résout votre problème:






<?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

Je n'utiliserais même pas l'affectation de variable multi-ligne. Un heredoc est FAR plus lisible, surtout si vous devez commencer à échapper des guillemets dans l'instruction d'assignation et/ou des variables d'interpolation. –

+0

Vous avez peut-être raison. Quelque chose à propos de la syntaxe heredoc m'avait irritée, mais c'était quand j'étais très inexpérimenté. Peut-être que je vais essayer à nouveau et voir si je l'aime mieux cette fois-ci. –

+0

Merci pour la réponse, j'ai essayé votre code mais il y a quelque chose qui ne va pas avec la syntaxe. Je suspecte parce que j'appelle ceci au milieu du javaScript, c'est pourquoi mon code est un peu bizarre avec tous les échos ... c'était la seule manière que je pourrais l'obtenir pour fonctionner. Je continuerai monkeying avec ce que vous avez ici et voir si je peux obtenir quelque chose à travailler. – Zac

0

Débarrassez-vous de tous les echo s et de le rendre ainsi:

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

Je ne comprends pas comment cela fonctionnerait, car je vais tirer d'environ 20 ID différents, mais les mêmes champs, 'mapExcerpt' etc .. vont être tirés pour chacun d'eux. Ne dois-je pas tous les enfermer dans une boucle afin que les champs corrects sont tirés pour cet id? – Zac

0

Je ferais cela comme un commentaire, mais il n'y a pas de codage formating là, donc ...

» ... Je vais tirer d'environ 20 ID de poste différents ... "

Comment ces identifiants sont-ils récupérés? D'une base de données? Quelles données sont tirées? Je devine la latitude/longitude, le nom du marqueur et l'identifiant du marqueur, n'est-ce pas? Si c'est le cas, alors quelque chose comme ça fonctionnerait:

$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 

N'oubliez pas de désinfecter tout texte que vous insérez comme code Javascript. Si (par exemple) le nom du marqueur contient le même type de guillemets que vous l'insérez à l'intérieur de, cela provoquera une erreur de syntaxe javascript, alors assurez-vous d'échapper les guillemets appropriés pour tout ce que vous insérez la variable.

+0

Je pense que ma question n'était peut-être pas assez claire sur ce que j'essaie d'accomplir. J'utilise la plate-forme Wordpress et j'essaie d'extraire de la base de données des champs personnalisés écrits à partir de l'éditeur de post et de les brancher sur le javascript utilisé pour alimenter une carte google. Je suis un peu perdu de votre réponse mais merci, je vais voir ce que je peux faire avec et j'espère apprendre une chose ou deux! – Zac

Questions connexes