2016-05-24 14 views
1

JoomlaをWebサイトのCMSとして使用しています。ページにマップを埋め込む際に、Webサイトを完全にW3Cに準拠させるためにいくつか問題があります。私がマップを埋め込むために使用しているモジュールは、このコードを使って地図を埋め込みます。PHP forループの出力を同じ行に残す

<iframe height="<?php echo $module_height; ?>" 
     style="border:<?php echo $border; ?>; 
     width:<?php echo $module_width.$module_width_unit; ?>" 
     src="http://maps.google.com/maps?q=<?php 
for ($loop = 0; $loop < $keywords_number; $loop += 1) { 
    echo $keywords[$loop]; 
    if($loop!=$keywords_number_1) { 
     echo "+"; 
     } 
} 

?>&amp;ie=UTF8&amp;view=map&amp;f=q&amp;saddr=<?php 

for ($loop = 0; $loop < $keywords_number; $loop += 1) { 
    echo $keywords[$loop]; 
    if($loop!=$keywords_number_1) { 
     echo ",+"; 
    } 
} 

?>&amp;<?php if($satellite) { ?>t=h&amp;<?php } ?>output=embed"></iframe> 

残念ながら、これはこのようなリターンになり、

<iframe height="300" style="border:none; width:100%" src="http://maps.google.com/maps?q=STREET ADDRESS 
CITY,+PROVINCE+POSTAL+CODE 
&amp;ie=UTF8&amp;view=map&amp;f=q&amp;saddr=STREET ADDRESS 
CITY,,+PROVINCE,+POSTAL,+CODE 
&amp;output=embed"></iframe> 

マップは、ウェブサイトで完全に罰金を示しているが、私はこのエラーを取得し、属性の

悪い値エレメントiframeのsrc:タブ、改行または改行が見つかりました。

私は、このWebサイトが完全にW3C準拠であることを望みます。出力のすべてのテキストを1行にする必要があるとします。

forループを強制的に同じ行に印刷するか、2つのループの出力を同じ行に残すために文字列に連結する方法はありますか?

ありがとうございます!あなたは、単純なスペースでのsrc URLに入れVARS内のすべての空白文字を置き換えることにより、

+0

も、HTMLに出力何にも開始する前に、PHPでの全体パラメータ文字列を構築していない理由をまず第一に、 。それは少なくとも、コードが現在書かれているスパゲッティコードの性質のために偽装された空白をクリーンアップして防止するのに役立ちます。 –

+1

複雑なループを使用して、 'join'のジョブをやめます。 – CBroe

+0

あなたの 'php'タグが置かれる方法は、なぜそれらの改行を得るべきなのか明らかな理由はありません。おそらく、それらのループで出力している値の一部ですか?次に、余分な空白を最初に '切り取る 'べきです。 (それをループに戻す必要はありません、 'array_map'が役に立ちます。) – CBroe

答えて

1

試してみてください。

<iframe height="<?php echo $module_height; ?>" style="border:<?php echo $border; ?>; width:<?php echo $module_width.$module_width_unit; ?>" src="http://maps.google.com/maps?q=<?php                                                   
for ($loop = 0; $loop < $keywords_number; $loop += 1) { 
    echo $keywords[$loop]; 
    if($loop!=$keywords_number_1) { 
     echo "+"; 
    } 
} 

?>&amp;ie=UTF8&amp;view=map&amp;f=q&amp;saddr=<?php 

for ($loop = 0; $loop < $keywords_number; $loop += 1) { 
    echo trim(preg_replace('/\s+/', ' ', $keywords[$loop])); 
    if($loop!=$keywords_number_1) { 
     echo ",+"; 
    } 
} 

?>&amp;<?php if($satellite) { ?>t=h&amp;<?php } ?>output=embed"></iframe> 
1

いくつかの提案:

  • 停止このスパゲッティコード
  • を書きます
  • ループをimplode()コールで置き換えることを検討してください。
  • クエリ構造をデータ構造として構築し、1回のパスでクエリ文字列に変換することを検討してください。パラメータ文字列

を適切にエンコードするURL

  • 私は次のようにこのコードを書くかもしれません:

    <?php 
    $google_map_base_url = 'http://maps.google.com/maps?'; 
    
    // prepare parameters 
    $parameters = array(); 
    $parameters['q'] = implode('+', $keywords); 
    $parameters['ie'] = 'UTF8'; 
    $parameters['view'] = 'map'; 
    $parameters['f'] = 'q'; 
    $parameters['saddr'] = implode(',+', $keywords); 
    if($satellite) { 
        $parameters['t'] = 'h'; 
    } 
    $parameters['output'] = 'embed'; 
    
    // build url-encoded query string 
    $query_string = http_build_query($parameters, '', '&amp;'); 
    
    // build final url 
    $google_map_url = $google_map_base_url . $query_string; 
    
    // now output to browser 
    ?> 
    <iframe height="<?php echo $module_height; ?>" style="border:<?php echo $border; ?>; width:<?php echo $module_width.$module_width_unit; ?>" src="<?php echo $google_map_url; ?>"></iframe> 
    
  • 関連する問題