Je dois introduire un menu déroulant qui modifie une variable dans une fonction et appelle cette fonction. Le logiciel original est https://github.com/Piwigo/piwigo-openstreetmap et un exemple de travail peut être trouvé dans http://photos.katrynou.fr/osmmap.php?v=2

La première info et modèle est appelé dans le fichier racine : https://github.com/Piwigo/piwigo-ope...er/osmmap2.php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
$js_data = osm_get_items($page);
$js = osm_get_js($conf, $local_conf, $js_data);
osm_gen_template($conf, $js, $js_data, 'osm-map2.tpl', $template);
Le template qui est appellé, https://github.com/Piwigo/piwigo-ope...e/osm-map2.tpl tient une bonne place pour un menu déroulant, je l'ai ajouté en conséquence :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
     <div id="ribbon-map-wrapper" style="visibility:hidden; max-width: 0px;">
                        <div class="jcarousel-wrapper" id="jcarousel-wrapper" style="max-width: 0px;">
                                <div class="jcarousel">
                                        <ul id="jcarousel-thumb">
 
                                        </ul>
 
   <select id="myDropDown">
        <option value='' disabled selected>Changecategory</option>
        <option value='35'>Cat35</option>
        <option value='3333'>Cat3333</option>
        <option value='66666'>Cat66666</option>
     </select>
                                </div>
Le code est appelé dans le template avec:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
 
<script type="text/javascript">{$OSMJS}</script>
et ce code est appelé depuis https://github.com/Piwigo/piwigo-ope...ctions_map.php qui remplit le modèle.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
function osm_gen_template($conf, $js, $js_data, $tmpl, $template)
{
    $linkname = isset($conf['osm_conf']['left_menu']['link']) ? $conf['osm_conf']['left_menu']['link'] : l10n('OSWorldMap');
    $template->set_filename('map', dirname(__FILE__). '/../template/' . $tmpl);
 
    $template->assign(
        array(
            'CONTENT_ENCODING'  => get_pwg_charset(),
            'OSM_PATH'          => embellish_url(get_gallery_home_url().OSM_PATH),
            'GALLERY_TITLE'     => $linkname .' - '. $conf['gallery_title'],
            'HOME'              => make_index_url(),
            'HOME_PREV'         => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : get_absolute_root_url(),
            'HOME_NAME'         => l10n("Home"),
            'HOME_PREV_NAME'    => l10n("Previous"),
            'TOTAL'             => sprintf( l10n('ITEMS'), count($js_data) ),
            'OSMJS'             => $js,
            'MYROOT_URL'        => get_absolute_root_url(),
            'default_baselayer' => $conf['osm_conf']['map']['baselayer'],
        )
    );
Plus précisément, j'ai ajouté un opérande "else" dans la fonction osm_get_items qui récupère toutes les photos de la catégorie 35*:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
function osm_get_items($page)
{
    // Limit search by category, by tag, by smartalbum
    $LIMIT_SEARCH="";
    $INNER_JOIN="";
    if (isset($page['section']))
    {
        if ($page['section'] === 'categories' and isset($page['category']) and isset($page['category']['id']) )
        {
            $LIMIT_SEARCH = "FIND_IN_SET(".$page['category']['id'].", c.uppercats) AND ";
            $INNER_JOIN = "INNER JOIN ".CATEGORIES_TABLE." AS c ON ic.category_id = c.id";
        }
        if ($page['section'] === 'tags' and isset($page['tags']) and isset($page['tags'][0]['id']) )
        {
            $items = get_image_ids_for_tags( array_reduce( $page['tags'], 'osm_get_page_tag_id' ) );
            if ( !empty($items) )
            {
                $LIMIT_SEARCH = "ic.image_id IN (".implode(',', $items).") AND ";
            }
        }
        if ($page['section'] === 'tags' and isset($page['category']) and isset($page['category']['id']) )
        {
            $LIMIT_SEARCH = "FIND_IN_SET(".$page['category']['id'].", c.uppercats) AND ";
            $INNER_JOIN = "INNER JOIN ".CATEGORIES_TABLE." AS c ON ic.category_id = c.id";
        }
    } else
 
{
 
  $LIMIT_SEARCH = "FIND_IN_SET('35', c.uppercats) AND ";
        $INNER_JOIN = "INNER JOIN ".CATEGORIES_TABLE." AS c ON ic.category_id = c.id";
    }
Mais je dois autoriser l'utilisateur à choisir une catégorie dans cette liste déroulante, que find_in_set utilise la variable choisie dans la liste déroulante. Je sais avec certitude que la variable de la liste déroulante doit être placée dans le "else" de la fonction osm_get_items au lieu de '35' qui charge réellement la catégorie 35 mais j'ai besoin de savoir comment définir une telle variable et le déclencheur pour changer la variable dans le menu déroulant

C'est délicat pour moi, même de l'expliquer. J'affinerai peut-être ma question à l'avenir si quelque chose n'est pas clair, mais tout est sur ces fichiers...

J'essayais d'inclure cela comme une tentative, mais je ne sais pas où; je l'ai mis dans osmmap2.php et j'obtiens l'erreur 500
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
  $(document).ready(function(){
    $('#myDropDown').change(function(){
        //Selected value
        var inputValue = $(this).val();
        alert("value in js "+inputValue);
 
        //Ajax for calling php function
        $.post('submit.php', { dropdownValue: inputValue }, function(data){
            alert('ajax completed. Response:  '+data);
            //do after submission operation in DOM
        });
    });
});
Pouvez-vous m'aider ?