Повторяющиеся элементы навигации по форме, идентификаторы HTML - PullRequest
1 голос
/ 10 июня 2011

У меня есть таблица, отображающая результаты из базы данных, и я добавляю к ней несколько кнопок подкачки / навигации, таких как «предыдущая», «следующая» и т. Д. Они создаются на данный момент как кнопки ввода ввода, которые обернуты с тегом формы и некоторыми скрытыми входными данными для передачи необходимых значений строки запроса обратно на саму страницу, что означает, что каждая форма и элемент в форме должны иметь атрибут ID.

Теперь я хотел бы добавить навигацию как вверху, так и внизу таблицы, поэтому я сконфигурировал генерацию навигации в единую процедуру, которую я вызываю при необходимости. Это, конечно, приводит к дублированию идентификаторов форм и элементов на странице, если в них включено более одной панели навигации.

Я думал о передаче некоторого параметра count в подпрограмму, чтобы при генерации HTML он мог добавить это значение к идентификаторам, и есть другие решения, такие как использование глобального счетчика (некрасиво) и т. Д., но я решил опросить толпу и посмотреть, что другие сделали в этой ситуации.

Спасибо

Пол

Ответы [ 3 ]

1 голос
/ 10 июня 2011

Недавно я сам сделал пагинатор, но подошел к нему совершенно по-другому. Я использовал php для генерации чисел, и у каждого номера (страницы) был тег с href, который был mywebsite.php? Page = x. Таким образом, вы можете использовать метод get, захватить номер страницы из URL и циклически проходить столько раз, сколько вы хотите, для количества отображаемых страниц.

Как говорится, существует более одного способа кожи кошки. Я предпочитаю метод передачи URL, потому что я могу держаться подальше от форм и идентификаторов в целом, делая так, чтобы пагинатор мог ходить туда, куда я решу (или сколько раз).

Вот снимок того, как я его генерировал. Надеюсь, это даст вам некоторые идеи!

/*PAGE NUMBERS*/
        // ceil rounds a decimal up to the next integer
        $pages=ceil(($totalrows-1)/$tablesize); //we subtract 1 from total rows because it counts 0
        //(int) typecasts the $pages variable, so that it is divisible by an integer (ceil makes it a float)
        $pages=(int)$pages;
        //displays all the pages with their links

        //if page count is less than 7 (the full paginator), display all pages
            if($pages<=7){
                for($i=1;$i<=$pages;$i++){
                    print "<a class='pages";
                    //add class current_page if necessary
                        if($page==$i){print " current_page";}
                    print "' href='index.php?page=";
                    print $i. "'>"." $i</a> "."  "."  ";    
                }
            //if page count is more than 7
            }else{
            //if page # is less than 4, display pages up to 7, so that there are always 7 pages available (makes the buttons not jump around)       
                if($page<=4){
                for($i=1;$i<=7;$i++){
                    print "<a class='pages";
                    //add class current_page if necessary
                        if($page==$i){print " current_page";}
                    print "' href='index.php?page=";
                    print $i. "'>"." $i</a> "."  "."  ";    
                }
            //if page # is less than 4 away from the end, display pages $pages-7
                }elseif($page>=$pages-3){
                    for($i=$pages-6;$i<=$pages;$i++){
                    //8,9,10,11,12,13,14,15
                        print "<a class='pages";
                        //add class current_page if necessary
                            if($page==$i){print " current_page";}
                                print "' href='index.php?page=";
                                print $i. "'>"." $i</a> "."  "."  ";    
                    }   
        //if it's in between the ends, do this          
                }else{                          
                    for($i=1;$i<$pages+1;$i++){
                    //limit the number of visible pages to 7
                        if(($i>=$page-3)&&($i<=$page+3)){
                        print "<a class='pages";
                        //add class current_page if necessary
                            if($page==$i){print " current_page";}
                        print "' href='index.php?page=";
                        print $i. "'>"." $i</a> "."  "."  ";    
                        }
                    }
            }
            }
1 голос
/ 13 июня 2011

Возможно, возникла путаница с тем, что я искал, но в двух словах - простой способ избежать проблемы дублирования идентификатора при использовании решения для подкачки на основе форм, которое может отображаться несколько раз на одной странице. (выше и ниже табличных данных, например). Мое решение состоит в том, чтобы смоделировать его после пейджинга PHPMyAdmin, так как я просто сейчас удаляю идентификаторы для элементов формы и ссылаюсь на данные, передаваемые через атрибут name, который допускает дублирование.

1 голос
/ 10 июня 2011

Из решений, о которых вы уже подумали, я бы предложил тактику, о которой вы упомянули сначала в последнем абзаце. Передача переменной строки запроса и загрузка числа записей X, включая переданное число (конечно, проверка ошибок, чтобы убедиться, что какой-то хитрый пользователь не пытается вставить случайные символы в строку запроса) решит вашу проблему.

Другой вариант (поскольку вы явно выполняете код для загрузки из БД) - это создать переменную сеанса и присвоить значение , которое при щелчке по ссылкам, и использовать его для создания списка. 1005 *

В обоих случаях при загрузке страницы вы можете взять текущее значение и добавить X (количество строк в результатах показано +1) и изменить значение, переданное ссылками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...