while 循环中的传单侧边栏

Leaflet sidebar within a while loop

我有一个包含多个点(纬度、经度和每个点的一些文本)的数据集,我想使用 Leaflet 在地图上显示这些点。 我没有使用 Leaflet 内置弹出窗口,而是尝试使用 leaflet-sidebar,它允许在单击标记时打开侧边栏。

如果你有兴趣,你可以在这里看到一个例子(只有一个标记): https://github.com/Turbo87/leaflet-sidebar/blob/master/examples/index.html

如您所见,我正确地为每个标记打开了侧边栏,但每个 <div> 的内容显示在 也在地图下方 。 这是因为我在 PHP while 循环中有 <div>,如下所示:

<?php
$i = 0;
while($result = mysql_fetch_array($objQuery)){
$i++;
$lat = $result['lat'];
$lon = $result['lon'];
$text = $result['some_text'];
?>

<div id="sidebar_<?=$i;?>" align="left">
<b>text</b>: <?=$some_text;?>
</div>

<script>
        var sidebar_<?=$i;?> = L.control.sidebar('sidebar_<?=$i;?>', {
        closeButton: true,
        position: 'left'
        });
        map.addControl(sidebar_<?=$i;?>);
        setTimeout(function () {
        sidebar_<?=$i;?>.hide();
        }, 500);
        var marker = L.marker([<?php echo $lat;?>, <?php echo $lon;?>]).addTo(map).on('click', function () {
        sidebar_<?=$i;?>.toggle();
        });
</script>

<?php
}
?>

如果我将 <div id="sidebar_<?=$i;?>"> 放在 while 循环之外,我无法收集每个标记 lat/lon/text 参考。

关于如何避免地图下方的重复,您有什么建议吗?

侧边栏样式需要添加display: none <div> -

<div id="sidebar_<?=$i;?>" align="left" style="display:none">
<b>text</b>: <?=$some_text;?>
</div> 

您可能可以使用 类 以更简洁的方式完成它,但这应该让您继续。

我找到了解决方法!

plugin webpage 上有一条动态添加内容到 <div> 的注释。 基本上,您需要将 html 中的 <div> 留空,并在脚本部分添加内容,使用 setContent:

<script>
        var sidebar_<?=$i;?> = L.control.sidebar('sidebar_<?=$i;?>', {
            closeButton: true,
            position: 'left'
        });

//HERE IT IS:

        sidebar_<?=$i;?>.setContent('<b>categoria</b>: <?=$categoria;?><br><br><b>problema</b>: <?=$descrizione;?><br><br><b>proposta</b>: <?=$soluzione;?><br><br><div class="smaller">data segnalazione: <?=$giorno."/".$mese."/".$anno;?></div>');

        map.addControl(sidebar_<?=$i;?>);
        setTimeout(function () {
            sidebar_<?=$i;?>.hide();
        }, 500);

        var marker = L.marker([<?php echo $lat;?>, <?php echo $lon;?>], {icon: iconarossa}).addTo(map).on('click', function () {
            sidebar_<?=$i;?>.toggle();
        });
</script>

现在看起来 as I wished