Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Prototype] Wybór kategorii jak na allegro ;)
phpion
post
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Witam,
przyznam, że zabawa z Prototype mnie wciągnęła i chciałbym Wam pokazać moją inną pracę.

http://phpworkstation.com/prototype/kategorie.html

Jest to skrypt umożliwiający wybór kategorii w taki sposób w jaki wybiera się kategorie na allegro. Obsługuje nieograniczoną liczbę zagnieżdżeń. Docelowo tablica k ma być tworzona dynamicznie na podstawie bazy danych (Ajax niepotrzebnie spowolniłby skrypt).

Proszę o opinie nt. skrypciku oraz pomoc w pewnym problemie. Mam problem z usuwaniem zbędnych selectów przy cofnięciu się w drzewie kategorii. Sądziłem, że użycie remove() będzie ok ale nie bardzo chce to działać. Tymczasowo więc dałem hide(). Wizualnie wygląda tak jak chciałem jednak elementy nadal siedzą w kodzie, a nie powinny. Gdyby ktoś znał rozwiązanie proszę o info.

  1. var Category = Class.create();
  2. Category.prototype = {
  3. initialize: function(id, name) {
  4. this.id = id;
  5. this.name = name;
  6. },
  7.  
  8. getId: function() {
  9. return this.id;
  10. },
  11.  
  12. getName: function() {
  13. return this.name;
  14. }
  15. }
  16.  
  17. var CategoryList = Class.create();
  18. CategoryList.prototype = {
  19. initialize: function(id) {
  20. this.id = id;
  21. },
  22.  
  23. build: function() {
  24. var categoryId = this.id;
  25.  
  26. if (k[this.id]) {
  27. categoryId = "";
  28.  
  29. var select = document.createElement("select");
  30.  
  31. select.setAttribute("size", 10);
  32.  
  33. select.onchange = function() {
  34. var i = 0;
  35.  
  36. while (select.next(i)) {
  37. //select.next(i).remove(); //<- questionmark.gif
  38. select.next(i).hide();
  39. i++;
  40. }
  41.  
  42. var cl = new CategoryList(this.value);
  43. cl.build();
  44. }
  45.  
  46. var length = k[this.id].length;
  47.  
  48. for (var i=0; i<length; i++) {
  49. var option = document.createElement("option");
  50. option.text = k[this.id][i].getName();
  51. option.value = k[this.id][i].getId();
  52.  
  53. select.appendChild(option);
  54. }
  55.  
  56. $("container").appendChild(select);
  57. }
  58.  
  59. setCategoryId(categoryId);
  60. }
  61. }
  62.  
  63. var k = new Array();
  64.  
  65. k[0] = new Array();
  66. k[0][0] = new Category(1, "Kategoria 1");
  67. k[0][1] = new Category(2, "Kategoria 2");
  68. k[0][2] = new Category(3, "Kategoria 3");
  69.  
  70. k[1] = new Array();
  71. k[1][0] = new Category(4, "Kategoria 1 1");
  72. k[1][1] = new Category(5, "Kategoria 1 2");
  73. k[1][2] = new Category(6, "Kategoria 1 3");
  74.  
  75. k[2] = new Array();
  76. k[2][0] = new Category(7, "Kategoria 2 1");
  77.  
  78. k[5] = new Array();
  79. k[5][0] = new Category(8, "Kategoria 1 2 1");
  80. k[5][1] = new Category(9, "Kategoria 1 2 2");
  81.  
  82. function initCategoryList() {
  83. var categoryList = new CategoryList(0);
  84. categoryList.build();
  85. }
  86.  
  87. function setCategoryId(id) {
  88. $("categoryId").value = id;
  89. }
  90.  
  91. Event.observe(window, "load", initCategoryList, false);


Pozdrawiam: pion

PS: zastanawiałem się czy nie dać tego do "Gotowe rozwiązania" gdyż jest to dość często poszukiwany skrypt, jednak na razie chciałbym poznać opinie na jego temat.
PS2: teraz zauważyłem, że pod IE skrypt nie działa :/ Opera i FireFox śmigają.

Ten post edytował phpion.com 22.11.2007, 21:00:25
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 21:21