2016-11-03 1 views
0

Я использую Wordpress, я зацикливаю свои статьи, и для каждой статьи я создаю случай и добавляю класс. Имя и имя класса берутся из пользовательских полей, прикрепленных к каждому сообщению.Loop в php сообщения и добавить класс в многоугольник (листовки)

Однако случается так, что если у меня есть 2 статьи, относящиеся к стране, например. Австралия, цикл скажет «нашел статью для Австралии с этим классом, установил случай и добавил свой класс». Однако, если у меня есть 2 статьи, связанные с Австралией, дело уже создано для этого, поэтому я не смогу добавить второй класс, поскольку он пропустит его. Поэтому я думаю, что делаю это неправильно, и я не должен использовать switch case.

Идея заключается в том, чтобы проверить матчи между country custom field и sovereignt property within the geoson, так что я могу сделать многоугольники страны, если любая статья относятся к стране, но если у меня есть 2 статьи, относящейся к одной стране, полигон только один раз, но есть проблема класса, как указано выше.

geojson = L.geoJson(statesData, { 
    style: style, 
    style: function(feature) { 
     <?php 
      query_posts(array(
      'post_type' => 'post', 
      'showposts' => -1 
     )); 
     ?> 
     switch (feature.properties.sovereignt) { 
      <?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
       case '<?php the_field("country"); ?>': return {className: '_<?php the_field("year"); ?>'}; 
      <?php endwhile; endif;?> 
     } 
    }, 
    onEachFeature: onEachFeature 
}).addTo(map); 

Переключатель случае пример я получил его от leaflet docs

ответ

0

Что вы делаете неправильно перемешивает PHP и JavaScript каждые две строки. Это рецепт для Disaster ™, так как вам нужно подумать о выполнении двух разных переплетенных языков. Хотя похоже, что он работает, он становится беспорядочным быстро.

Вместо этого отделить логику немного, и взять контроль над переменными вокруг:

<?php // Preprocess some data ?> 

var something = <?php echo JSON_encode(some_clearly_defined_data); ?> 

do_something_with_the_data(); 

т.е .:

<?php 
classesForCountries = []; 
while (have_posts()) { 
    classesForCountries[ post.country ] += post.className + ' '; 
} 
?> 

// Now this should look something like {"Australia": "2006 2010 "} 
var classNameMap = <?php echo JSON_encode(classesForCountries); ?>; 

geojson = L.geoJson(statesData, { 
    style: function(feature) { 
     // Now the logic is a simple hashmap look-up 
     var classes = classNameMap[feature.properties.sovereignt]; 
     if (classes) { 
      return {className: classes}; 
     } 
    }, 
}).addTo(map); 

Не смотрите, что чище? В то время как вы можете смешивать PHP и JS вместе, вы должны сохранить свой код человеко-читаемым и легко понять. Создайте переменные и состояния, которые вы можете проверить. Сделайте код, который ваш будущий «я» захочет прочитать.

+0

P.S. Пожалуйста, извините мой ржавый PHP, это было какое-то время. – IvanSanchez

+0

что такое post.country? Вы имеете в виду, что я должен вывести поле, например the_field («страна»); ? –

+0

Выведите его так, как вам нужно. Подумайте, что мой PHP должен быть псевдокодом. – IvanSanchez