Browse Source

Evolution #98: Formulaire filtre: Plus de chargement après click sur tag

bastien 13 years ago
parent
commit
a876f523ec

+ 4 - 4
src/Muzich/CoreBundle/Controller/SearchController.php View File

@@ -163,7 +163,7 @@ class SearchController extends Controller
163 163
     foreach ($tags as $i => $tag)
164 164
     {
165 165
       // Pas plus de trois caractères en plus de la recherche
166
-      if (strlen(str_replace(strtoupper($search), '', strtoupper($tag))) < 4)
166
+      if (strlen(str_replace(strtoupper($search), '', strtoupper($tag['name']))) < 4)
167 167
       {
168 168
         unset($tag_sorted[$i]);
169 169
         $tag_sorted = array_merge(array($tag), $tag_sorted);
@@ -175,7 +175,7 @@ class SearchController extends Controller
175 175
     foreach ($tags as $i => $tag)
176 176
     {
177 177
       // Pas plus de trois caractères en plus de la recherche
178
-      if (strtoupper($search) == strtoupper($tag))
178
+      if (strtoupper($search) == strtoupper($tag['name']))
179 179
       {
180 180
         unset($tag_sorted[$i]);
181 181
         $tag_sorted = array_merge(array($tag), $tag_sorted);
@@ -213,7 +213,7 @@ class SearchController extends Controller
213 213
         }
214 214
 
215 215
         $tags = $this->getDoctrine()->getEntityManager()->createQuery("
216
-          SELECT t.name FROM MuzichCoreBundle:Tag t
216
+          SELECT t.name, t.id FROM MuzichCoreBundle:Tag t
217 217
           $where
218 218
           ORDER BY t.name ASC"
219 219
         )->setParameters($params)
@@ -223,7 +223,7 @@ class SearchController extends Controller
223 223
         $tags_response = array();
224 224
         foreach ($tags as $tag)
225 225
         {
226
-          $tags_response[] = $tag['name'];
226
+          $tags_response[] = array('name' => $tag['name'], 'id' => $tag['id']);
227 227
         }
228 228
         
229 229
         $tags_response = $this->sort_search_tags($tags_response, $string_search);

+ 16 - 4
src/Muzich/CoreBundle/Resources/views/Tag/tagsPrompt.html.twig View File

@@ -12,6 +12,7 @@
12 12
   {% endif %}
13 13
   
14 14
    <input class="tags_prompt_list" id="tags_prompt_list_{{ form_name }}" name="tags" value=""> 
15
+   <input id="tags_selected_tag_{{ form_name }}" type="hidden" value="" />
15 16
    <div id="search_tag_{{ form_name }}" class="search_tag_list" style="display: none;">
16 17
      <span class="info"></span>
17 18
      <div class="tag_loader_div">
@@ -133,23 +134,34 @@
133 134
               more = false;
134 135
               // Pour chaque tags retournés
135 136
               for (i in tags)
136
-              {                
137
+              {
138
+                var tag_name = tags[i]['name'];
139
+                var tag_id = tags[i]['id'];
137 140
                 // On construit un li
138 141
                 var sstr = $.trim(input.val());
139 142
                 var re = new RegExp(sstr, "i") ;
140
-                var t_string = tags[i].replace(re,"<strong>" + sstr + "</strong>");
143
+                var t_string = tag_name.replace(re,"<strong>" + sstr + "</strong>");
141 144
                 
142 145
                 li_tag = 
143 146
                   $('<li>').append(
144
-                    $('<a>').attr('href','#'+tags[i])
147
+                    $('<a>').attr('href','#'+tag_id+'#'+tag_name)
145 148
                     // qui réagit quand on clique dessus
146 149
                     .click(function(e){
147 150
                       // On récupère le nom du tag
148
-                      inputTag.val($(this).attr('href').substr(1,$(this).attr('href').length));
151
+                      name = $(this).attr('href').substr(1,$(this).attr('href').length);
152
+                      name = name.substr(strpos(name, '#')+1, name.length);
153
+                                            
154
+                      id = $(this).attr('href').substr(1,$(this).attr('href').length);
155
+                      id = str_replace(name, '', id);
156
+                      id = str_replace('#', '', id);
157
+                                            
158
+                      $('input#tags_selected_tag_'+form_name).val(id);
159
+                      inputTag.val(name);
149 160
                       // Et on execute l'évènement selectTag de l'input
150 161
                       inputTag.trigger("selectTag");
151 162
                       // On cache la liste puisque le choix vient d'être fait
152 163
                       divtags.hide();
164
+                      inputTag.val(tag_text_help); 
153 165
                       return false;
154 166
                     })
155 167
                     .append(t_string)

+ 13 - 0
web/bundles/muzichcore/js/muzich.js View File

@@ -55,6 +55,19 @@ function json_to_array(json_string)
55 55
   return new Array();
56 56
 }
57 57
 
58
+function strpos (haystack, needle, offset) {
59
+    // Finds position of first occurrence of a string within another  
60
+    // 
61
+    // version: 1109.2015
62
+    // discuss at: http://phpjs.org/functions/strpos    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
63
+    // +   improved by: Onno Marsman    
64
+    // +   bugfixed by: Daniel Esteban
65
+    // +   improved by: Brett Zamir (http://brett-zamir.me)
66
+    // *     example 1: strpos('Kevin van Zonneveld', 'e', 5);    // *     returns 1: 14
67
+    var i = (haystack + '').indexOf(needle, (offset || 0));
68
+    return i === -1 ? false : i;
69
+}
70
+
58 71
 /**
59 72
  * Converts the given data structure to a JSON string.
60 73
  * Argument: arr - The data structure that must be converted to JSON

+ 14 - 12
web/js/tags/jquery.tagBox.js View File

@@ -56,28 +56,30 @@
56 56
         });
57 57
         
58 58
         self.tagInput.bind("selectTag", function(event) {
59
+          
59 60
           if(!$(this).val()) {
60 61
               return;
61 62
           }
62 63
           
63 64
           input = $(this);
65
+          inputId = $('input#tags_selected_tag_'+options.form_name);
64 66
           
65 67
           // Ici il faut faire un ajax q pour connaitre l'id, on a que le string
66 68
           // ajax loader gif
67
-          $('#tag_loader_'+options.form_name).css('display', 'block');
69
+          //$('#tag_loader_'+options.form_name).css('display', 'block');
68 70
           // On bloque le submit le temps de la validation du tag
69
-          $('form[name="'+options.form_name+'"] input[type="submit"]').attr('disabled', 'disabled');
70
-          $.getJSON('/app_dev.php/fr/search/tagid/'+$(this).val(), function(data) {
71
-            if (isInteger(data))
72
-            {
73
-              self.addTag(input.val(), data, options.form_name, false);
74
-              input.val("");
75
-              $('#tag_loader_'+options.form_name).css('display', 'none');
76
-              $('form[name="'+options.form_name+'"] input[type="submit"]').removeAttr('disabled');
77
-            }
78
-          });
71
+          //$('form[name="'+options.form_name+'"] input[type="submit"]').attr('disabled', 'disabled');
72
+//          $.getJSON('/app_dev.php/fr/search/tagid/'+$(this).val(), function(data) {
73
+//            if (isInteger(data))
74
+//            {
75
+//              self.addTag(input.val(), data, options.form_name, false);
76
+//              input.val("");
77
+//              $('#tag_loader_'+options.form_name).css('display', 'none');
78
+//              $('form[name="'+options.form_name+'"] input[type="submit"]').removeAttr('disabled');
79
+//            }
80
+//          });
79 81
 
80
-          
82
+          self.addTag(input.val(), inputId.val(), options.form_name, false);
81 83
         });
82 84
         
83 85
         self.tagbox = $('<ul>', {