Pager: обернуть li в div

Главные вкладки

Аватар пользователя molp molp 10 сентября 2011 в 13:35

Здравствуйте, уважаемое сообщество.

Прошу подсказать каким образом можно обернуть теги списка выводимого пэйджинатором в теги div?
Искал, читал, но так и не понял, где именно формируется этот список.

Комментарии

Аватар пользователя CSoft CSoft 10 сентября 2011 в 14:11

"molp" wrote:
обернуть li в div

Этого нельзя делать. В UL могут идти только элементы списка LI. А внутри уже - обёртывайте содержимое дивом.

Функции темизации пейджера находятся в файле includes/pager.inc с префиксом theme_ в имени функции. Например, theme_pager. Ну а дальше о темизации читайте на сайте, материала много. Главное - ни в коем случае не править прямо там!

Аватар пользователя molp molp 10 сентября 2011 в 14:11

С тем что не справлюсь с php - смирился. Пробую обернуть при помощи jQuery, но и тут результат не совсем ожидаемый.

$('ul.pager li').wrap('<div class="pager-wrapper-1"><div class="pager-wrapper-2"></div></div>');

В коде происходит двойная "обертка":

<div class="pager-wrapper-1">
        <div class="pager-wrapper-2">
                <div class="pager-wrapper-1">
                        <div class="pager-wrapper-2">
                                <li class="pager-current first">1</li>
                        </div>
                </div>
        </div>
</div>
Аватар пользователя CSoft CSoft 10 сентября 2011 в 14:13

"molp" wrote:
но и тут результат не совсем ожидаемый

Нельзя так делать вообще. Нарушаете стандарты кодирования html-документа.

Аватар пользователя molp molp 10 сентября 2011 в 14:25

"CSoft" wrote:
Нельзя так делать вообще. Нарушаете стандарты кодирования html-документа.

Обертка списка в дивы? С этим понятно - не проснулся еще )

Аватар пользователя molp molp 10 сентября 2011 в 14:28

Подскажите почему происходит двойная обертка?

$('ul.pager li').wrapInner('<span class="pager-wrapper-1"><span class="pager-wrapper-2"></span></span>');

<li class="pager-current first">
        <span class="pager-wrapper-1">
                <span class="pager-wrapper-2">
                        <span class="pager-wrapper-1">
                                <span class="pager-wrapper-2">1</span>
                        </span>
                </span>
        </span>
</li>
Аватар пользователя CSoft CSoft 10 сентября 2011 в 14:40

"direqtor" wrote:
Изменяется перекрытием этой функции темизации theme_item_list

Я бы не стал её трогать, ибо обернутся все списки на сайте. Советую работать с theme_pager.

Аватар пользователя molp molp 10 сентября 2011 в 15:13

Както так?

template.php

<?php
function theme_pager($tags = array(), $limit 10$element 0$parameters = array(), $quantity 9) {

...

if (

$li_first) {
      
$items[] = array(
        
'class' => 'pager-first',
        
'data' => '<div class="wr1">'.$li_first.'</div>',
      );
    }

...

}

?>
Аватар пользователя Cyber Cyber 10 сентября 2011 в 15:22

"molp" wrote:
$('ul.pager li').wrap('

');

йобте ...

.wrap('<div />');
.wrap('<div class="some" />');
.wrap('<div id="some" />');

"molp" wrote:
$('ul.pager li').wrapInner('');

.wrapInner('<div />');
.wrapInner('<div class="some" /><div class="some2" />');
.wrapInner('<div id="some" class="some" />');

"Single-tag" style.

А вообще то тока идиот будет заворачивать элемент списка в блок ... и даже закрыв глаза на то, что это делается динамически, такая конструкция эстетически неверна!

<ul>
<li>1</li>
<li>2</li>
</ul>

Если вы хотите сделать что-то на подобие гламурных кнопок, то я бы посоветовал .apend() с пустым блочным элементом, на который можно навешать графику. А вообще всё решается CSS по большей части.

Для проверки на наличие элемента, чтобы не гонять код лишний раз, можно оберунть в условие

if( $('.pager').length ) {
 // code goes here
}
Аватар пользователя CSoft CSoft 10 сентября 2011 в 16:04

Не надо извращений... Делайте через темизацию. Уже почти сделали, только корректно имя функции поставьте и всё.

Аватар пользователя molp molp 10 сентября 2011 в 16:22

Опишу подробно свои действия:
1. Создаю файл template.php в папке с темой
2. В файл копирую код отсюда [ru-api=theme_pager]theme_pager[/ru-api]
3. Переименовываю в коде имя функции theme_pager на mytheme_pager
4. Заменяю (пока одну) строку: 'data' => $li_first, на 'data' => '<div>'.$li_first.'</div>',
5. Чищу кэш.

Результат - никаких изменений.

Аватар пользователя molp molp 10 сентября 2011 в 17:00

Нет - не работает.
Подскажите а если вставлять внутрь li то с чем работать? Это все в коде theme_pager?

Аватар пользователя CSoft CSoft 10 сентября 2011 в 17:04

"molp" wrote:
Нет - не работает.

Это работает, ещё раз повторяю, - 100%. Я так тысячу раз оборачивал содержимое в нужные мне теги. Что-то делаете неправильно.

Аватар пользователя CSoft CSoft 10 сентября 2011 в 17:05

"molp" wrote:
Подскажите а если вставлять внутрь li то с чем работать?

Так это и есть вставка внутрь тега li... То, что находится в ['data'] - оборачивается потом в li.

Аватар пользователя molp molp 10 сентября 2011 в 17:53

Ну раз должно работать, то буду разбираться, где совершил ошибку.
Большое всем спасибо, кто уделил время.

p.s.: Еще очень интересует вариант с оберткой на jQuery и вопрос почему в моем варианте она дублируется. Я пробовал сделать тоже самое отдельно в файле html там все работает хорошо, а вот Друпал почему-то дублирует.

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 10 сентября 2011 в 18:06

"molp" wrote:
Подскажите почему происходит двойная обертка?

Двойной вызов js или двойная вложенность li.

Идея навскидку...

$('ul.pager li:not(.wrapped)').addClass('wrapped').wrapInner('<span class="pager-wrapper-1"><span class="pager-wrapper-2"></span></span>');

Хотя делать это через js мне представляется порочной идеей.

Аватар пользователя marazmus marazmus 10 сентября 2011 в 19:06

Скажите, а зачем вам обертывать теги li в тег div? Мне почему-то кажется, что вы не можете решить какую-то элементарную задачу по верстке пейджера, и вместо нормального решения на CSS городите мегаогород из архиглупого решения по обертке li в div (нарушая семантику документа) да еще и приправляя это JS...

Аватар пользователя molp molp 10 сентября 2011 в 23:08

В своем втором комменте я уже написал, почему li в div Smile

Ну а простым CSS не обойтись - нужно циферки оформить в закругленные кнопочки. Минимум два контейнера нужно: первый - левая сторона и бэкграунд одной картинкой, второй - правая сторона.

Аватар пользователя Cyber Cyber 10 сентября 2011 в 23:57

"molp" wrote:
Ну а простым CSS не обойтись - нужно циферки оформить в закругленные кнопочки. Минимум два контейнера нужно: первый - левая сторона и бэкграунд одной картинкой, второй - правая сторона.

pie ... .append() + float; + position по вкусу ....

count in css ... switch

Аватар пользователя molp molp 11 сентября 2011 в 2:14

Возможно я не совсем понятно выразился, но ваш пример не подходит. Оформить нужно каждую кнопку пэйджинатора.

Аватар пользователя Cyber Cyber 11 сентября 2011 в 12:30

Попробуйте ковырять это

<?php
/* Better pagination addon  */
function YourThemeName_pager($tags = array(), $limit 10$element 0$parameters = array(), $quantity 9) {
  global 
$pager_page_array$pager_total$theme;
  
$pager_middle ceil($quantity 2);
  
$pager_current $pager_page_array[$element] + 1;
  
$pager_first $pager_current $pager_middle 1;
  
$pager_last $pager_current $quantity $pager_middle;
  
$pager_max $pager_total[$element];
 
  
// Prepare for generation loop.
  
$i $pager_first;
  if(
$pager_last $pager_max) {
    
$i $i + ($pager_max $pager_last);
    
$pager_last $pager_max;
  }
  
  if(
$i <= 0) {
    
$pager_last $pager_last + ($i);
    
$i 1;
  } 
// End of generation loop preparation.
  
  
$li_previous theme('pager_previous', (isset($tags[1]) ? $tags[1] : 'назад' ), $limit$element1$parameters);
  
$li_next theme('pager_next', (isset($tags[3]) ? $tags[3] : 'вперёд' ), $limit$element1$parameters);
 
  
$li_first theme('pager_first'1$limit$element$parameters);
  
$li_last theme('pager_last'$pager_max$limit$element$parameters);
 
  
$show_first = ( $i ) ? true false ;
 
  if(
$pager_total[$element] > 1) {
 
    if( 
$li_previous $items[] = array( 'class' => 'pager-previous''data' => $li_previous );
    if( 
$show_first && $li_first $items[] = array( 'class' => 'pager-first''data' => $li_first );
    if(
$i != $pager_max) {
 
      if(
$i 2$items[] = array( 'class' => 'pager-ellipsis''data' => '&#8230;' );
      for(; 
$i <= $pager_last && $i <= $pager_max$i++) {
        if(
$i $pager_current $items[] = array( 'class' => 'pager-item''data' => theme('pager_previous'$i$limit$element, ($pager_current $i), $parameters) );
        if(
$i == $pager_current$items[] = array( 'class' => 'pager-current''data' => $i );
        if(
$i $pager_current$items[] = array( 'class' => 'pager-item''data' => theme('pager_next'$i$limit$element, ($i $pager_current), $parameters) );
      }
 
      if (
$i $pager_max$items[] = array( 'class' => 'pager-ellipsis''data' => '&#8230;' );
 
    }
 
    
$show_last = ( $pager_max  > ($i-1) ) ? true false ;  
    if( 
$show_last && $li_last$items[] = array( 'class' => 'pager-last''data' => $li_last );
    if( 
$li_next$items[] = array( 'class' => 'pager-next''data' => $li_next );
 
    return 
theme('item_list'$itemsNULL'ul', array('class' => 'pager'));
  }
// End pagination addon
?>
Аватар пользователя CSoft CSoft 11 сентября 2011 в 13:29

Пипец... Решение проблемы написано в самом первом комментарии к этой теме. Чего за бурную деятельность из-за элементарной темизации вы все развели? Отправьте автора учиться темизации, он на 99% всё сделал уже, а вы его только запутаете сейчас.

"orion76" wrote:
orion76

Что это такое? У Вас постраничная навигация всегда одинакового размера по ширине? Наверное, "1" занимает столько же места, столько и "100"?

Аватар пользователя CSoft CSoft 11 сентября 2011 в 13:30

"molp" wrote:
Ну раз должно работать, то буду разбираться, где совершил ошибку.

molp, найдите свою ошибку и не мучайтесь. И не слушайте больше ничего, Вы уже всё сделали! Просто доделайте по-человечески!

Аватар пользователя Cyber Cyber 11 сентября 2011 в 14:05

"CSoft" wrote:
Пипец... Решение проблемы написано в самом первом комментарии к этой теме. Чего за бурную деятельность из-за элементарной темизации вы все развели? Отправьте автора учиться темизации, он на 99% всё сделал уже, а вы его только запутаете сейчас.

Ололо, чё за пузырёж?

Аватар пользователя CSoft CSoft 11 сентября 2011 в 14:12

Cyber, научитесь с людьми общаться сначала, я Вам не мальчик. Если есть личные претензии ко мне - пишите в ЛС. Если не согласны по теме с моим решением - пишите мотивированные обоснования.

P. S. Сообщение, которое Вы цитируете, было написано не одному Вам. Если так будет понятнее.

Аватар пользователя Cyber Cyber 11 сентября 2011 в 14:23

"CSoft" wrote:
Cyber, научитесь с людьми общаться сначала, я Вам не мальчик.

Не надо узурпировать. Аналогично можно сказать и вам.

"CSoft" wrote:
пишите мотивированные обоснования.

детский сад

Аватар пользователя CSoft CSoft 11 сентября 2011 в 14:30

"Cyber" wrote:
Аналогично можно сказать и вам.

И что же я сказал такого, интересно? Я попросил не путать человека, когда он уже почти всё сделал сам. Вы потом взяли и написали аналогичное решение моему, только дали человеку совершенно ненужный, чужой код, который ему якобы нужно ковырять. Когда он сам уже сделал такой же точно, но под себя:

"molp" wrote:

if ($li_first) {
      $items[] = array(
        'class' => 'pager-first',
        'data' => '<div class="wr1">'.$li_first.'</div>',
      );
    }

Зачем его запутывать теперь? Не понятно.

"Cyber" wrote:
детский сад

Ахах, ну да, конечно:

"Cyber" wrote:
йобте ...

"Cyber" wrote:
xD

"Cyber" wrote:
Ололо

Я детский сад, да Smile

Ладно, предлагаю закрыть тему. Автору помогли в общем-то, а скубаться я не желаю. На ровном месте? Не стоит.

Аватар пользователя CSoft CSoft 11 сентября 2011 в 14:34

Передо мной школьник. Обижаться не буду, всё понятно. Дитя, которое решило тут всем показать, какое оно невъебенное, но, увы и ах, тут есть и другие люди, не тупее! Обидно, понимаю Smile Учите уроки, завтра в школу.

Аватар пользователя Cyber Cyber 11 сентября 2011 в 14:35

"CSoft" wrote:
Обижаться не буду, всё понятно.

Я рад, что ваша истерозность поутихла. А теперь предлагаю потереть всё что не относится к теме и сделать этот топик чуточку более полезным для широких масс.

Аватар пользователя CSoft CSoft 11 сентября 2011 в 14:37

"Cyber" wrote:
ваша истерозность

Я не знаю такого слова, к сожалению.

"Cyber" wrote:
А теперь предлагаю потереть всё что не относится к теме и сделать этот топик чуточку более полезным для широких масс.

Я бы ещё и Ваш аккаунт потёр, чтобы Вы слова подбирали в следующий раз. Малолетнее хамло.

Аватар пользователя Cyber Cyber 11 сентября 2011 в 14:40

"CSoft" wrote:
Я бы ещё и Ваш аккаунт потёр, чтобы Вы слова подбирали в следующий раз. Малолетнее хамло.

по земле покатайтесь, можно потопать ногами, легче станет

Аватар пользователя Cyber Cyber 11 сентября 2011 в 14:41

"CSoft" wrote:
Не переживайте за меня, за себя переживайте.

вот именно, следи за собой и не тыкай в меня своими школьными комплексами

Аватар пользователя CSoft CSoft 11 сентября 2011 в 14:44

Я школу закончил 6 лет назад. Это так, к сведению.

Второе - чтобы в тебя, бедный мой друг, не тыкали носом - не тупи, а читай, что пишут в теме остальные, и не повторяй в сотый раз чужой ответ, да ещё и приводя при этом кусок непонятного, ненужного кода.

Аватар пользователя Cyber Cyber 11 сентября 2011 в 14:53

"CSoft" wrote:
Я школу закончил 6 лет назад. Это так, к сведению.

Лучше бы ты этого не писал -- сошёл бы за взрослого ...

"CSoft" wrote:
Второе - чтобы в тебя, бедный мой друг, не тыкали носом - не тупи, а читай, что пишут в теме остальные, и не повторяй в сотый раз чужой ответ, да ещё и приводя при этом кусок непонятного, ненужного кода.

Чем этот код не подходит для темы с "Pager" в тайтле? Зайдёт другой человек и получит гораздо больше информации нежели твой голимый посыл в первом посте. Этот код делает вполне адекватный и удобный постраничник, если чё.

Аватар пользователя CSoft CSoft 11 сентября 2011 в 15:36

"Cyber" wrote:
Лучше бы ты этого не писал -- сошёл бы за взрослого ...

Что ви говорите xD Взрослый - это наверное лет c 40. Интересно-интересно!

Я не стесняюсь того, что я молодой программист. И никогда этого стесняться не буду, не намерен даже. Мне не 13 лет, чтобы стесняться.

Знаешь, читаю твои сообщения - вот тут точно ничего взрослого не вижу. И эти посылы на хуй - взрослый человек так будет общаться? Чёрта с два. И показывать свою невъебенность, как это ты делаешь на протяжении всей темы - взрослый человек тоже не будет. Уверен, что у нас или похожий возраст, или ты младше меня. По крайней мере, судя по твоей манере общения. Юношеский максимализм.

"Cyber" wrote:
Чем этот код не подходит для темы с "Pager" в тайтле?

Я уже сто раз ответил выше. Перечитай. Не путайте человека, пусть с простым разберётся сначала. IMHO.

На этом из темы выхожу. Всё, что мог - подсказал. А с тобой разговор у нас так никогда не закончится, да и бесполезен он. Два барана друг другу ничего никогда не докажут.

Аватар пользователя molp molp 11 сентября 2011 в 15:58

Ну на пустом месте ведь... люди хватит уже.
Лучше бы ошибку подсказали как найти. Потому что 1% из 99 мне так и не хватило.

Аватар пользователя CSoft CSoft 11 сентября 2011 в 16:00

molp, Вы создали свою тему, так? Активировали. Внутри неё поместили файлик template.php и прописали там код, который приводили?

В общем, подробнее и по шагам, что делалось.

Аватар пользователя molp molp 11 сентября 2011 в 16:08

Большое спасибо вам. Просто обернул все значения ключей 'data' в контейнеры и получил нужный результат.

Аватар пользователя CSoft CSoft 11 сентября 2011 в 16:10

"molp" wrote:
Просто обернул все значения ключей 'data' в контейнеры и получил нужный результат.

Ну да, так и надо было сделать Smile Вы ведь и код для этого давно составили. Так а почему не работало-то?

Аватар пользователя Cyber Cyber 11 сентября 2011 в 17:14

"CSoft" wrote:
Я не стесняюсь того, что я молодой программист. И никогда этого стесняться не буду, не намерен даже. Мне не 13 лет, чтобы стесняться.

прекращай играть в доморощенного психолога, оставь это занятие для кого-то другого.

"CSoft" wrote:
На этом из темы выхожу. Всё, что мог - подсказал. А с тобой разговор у нас так никогда не закончится, да и бесполезен он. Два барана друг другу ничего никогда не докажут.

не обобщай, и даже не пытайся думать, что я кого пытаюсь сопоставить, либо обидеть, мне это тупо не нужно

"CSoft" wrote:
Уверен, что у нас или похожий возраст, или ты младше меня. По крайней мере, судя по твоей манере общения. Юношеский максимализм.

судя по всему ты пытаешься сделать какие то выводы сидя в интернете и откапывая потайной смысл между строк. выйди подыши свежим воздухом