在php中循环帖子并向多边形添加一个类(传单)

时间:2016-11-03 09:55:06

标签: javascript php jquery wordpress leaflet

我正在使用Wordpress,我正在循环我的文章,每篇文章我都在创建一个案例并添加一个类。案例名称和班级名称取自附加到每个帖子的自定义字段。

然而,如果我有2篇与国家相关的文章,那么会发生什么?澳大利亚,循环人员会说"在这个班级找到一篇关于澳大利亚的文章,设置一个案例并添加其类#34;。但是,如果我有2篇与澳大利亚相关的文章,那么已经为它创建了案例,因此我无法添加第二个类,因为它会跳过它。因此,我认为我做错了,我不应该使用switch case

我们的想法是检查country custom fieldsovereignt 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

获得了切换案例

1 个答案:

答案 0 :(得分:0)

你错误的是每两行混合PHP和JavaScript。这是Disipe™的食谱,因为您必须考虑两种不同交织语言的执行。虽然看起来它很有效,但它会变得很乱 fast

相反,将逻辑分开一点,并控制周围的变量:

<?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混合在一起,但您应该保持代码人类可读并且易于理解。创建可以检查的变量和状态。制作未来自己想要阅读的代码。