Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Чередование двух class в ссылках

Чередование двух class в ссылках


     29.08.2013    class    Все вопросы » Общие вопросы по PHP    3244

вопрос
Здравствуйте! Хотел бы попросить помощи, хочу сделать что бы в ссылке менялись классы и дополнительно ставился data-link.

То есть, на странице есть ссылки и я хочу чередовать два класса, а у первого дополнительно ставить data-link="..." что бы получилось так

<a .... class="test"  data-link="..."></a>
<a .... class="test2"></a>
<a .... class="test"  data-link="..."></a>
<a .... class="test2"></a>

Я искал решение и нашел

$class_a = array ('class="test"  data-link="..."', 'class="test2"');
$class_a_id = mt_rand(0,(count($class_a)-1));

но оно не подходит, код вытаскивает из массива случайны класс, а мне нужно по порядку как указанно в массиве и чередовать их, так как ссылок может быть 2 а может и 10.

Может кто поможет, или подскажите куда копать.

Ответил: nowheremany


21 комментарий

Exile
Гости

Exile - 29 августа 2013 23:09 -

А чем jquery не угодил?
$(document).ready(function(){
    $("a:even").addClass("test2");
    $("a:odd").addClass("test");
    $("a:odd").attr("data-link", "...")
  });
a - тег
:even - все четные теги
:odd - все нечетные теги

oo22maxi
Юзер

oo22maxi - 30 августа 2013 10:13 -

Цитата: Exile
А чем jquery не угодил?
$(document).ready(function(){
    $("a:even").addClass("test2");
    $("a:odd").addClass("test");
    $("a:odd").attr("data-link", "...")
  });

a - тег
:even - все четные теги
:odd - все нечетные теги


Ну почему не угодил, просто я его вообще не знаю...( Может пример покажешь, а то чет мучаюсь и не знаю даже как его прикрутить к ссылкам. Я его еще не перекрутил но как я понял, скрипт должен менять у всех тегов а классы так? Если так, то тогда если мне нужно сделать у определенных ссылок, то нужно указать getElementsByClassName или меня не туда несет?

P.S. Я хочу менять не все ссылки а только ссылки attachment которые генерирует движок, и не знаю при помощи чего лучше это сделать.

oo22maxi
Юзер

oo22maxi - 30 августа 2013 12:57 -

Как прикрутить его я разобрался, но как я и думал, меняются все ссылки. При просмотре исходного кода страницы нет data-link="..." в ссылках, должен ли он появиться там или нет?

Exile
Гости

Exile - 30 августа 2013 14:46 -

$(document).ready(function(){
    $("a[href^='http://sitename.com/engine/download.php']:even").addClass("test2");
    $("a[href^='http://sitename.com/engine/download.php']:odd").addClass("test");
    $("a[href^='http://sitename.com/engine/download.php']:odd").attr("data-link", "...")
  });

Дак я сам jquery не знаю, написал за 2 минуты по документации. Попробуй сделать так, только замени http://sitename.com/ на домен своего сайта.

oo22maxi
Юзер

oo22maxi - 30 августа 2013 14:49 -

Сейчас попробую и отпишусь.

oo22maxi
Юзер

oo22maxi - 30 августа 2013 14:48 -

Попробовал я jquery, но это не то как и css, и скрипт думаю тоже не подойдет, нужно на php...

Помогите переделать этот код, что бы не рандом было, а по порядку, как в массиве.

$class_a = array ('что то тут', 'и что та там');
$class_a_id = mt_rand(0,(count($class_a)-1));

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

Exile
Гости

Exile - 30 августа 2013 14:53 -

Ну php это же извращение. Какой отличительный класс/id есть у аттачментов?

oo22maxi
Юзер

oo22maxi - 30 августа 2013 15:26 -

Дело в том, что движок генерирует ссылку так же как и название. Я не сильно шарю, но вот как я думаю сделать

вот как этот код выглядит в functions.php:

$replace_1[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >{$row['name']}</a> [{$size}] ({$lang['att_dcount']} {$row['dcount']})</span>";


Я маленько его поправил под себя, вот так у меня сейчас выглядит:

$replace_1[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >Скачать</a></span>";


А вот что я хочу что бы у меня получилось примерно

$replace_1[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" class=\"test\"  data-link=\"{$row['name']}\">Скачать</a></span>";


Отличительный класс можно взять из <span class="attachment"> наверноe, а так класса в ссылке нет.

P.S.: Более подробно что я хочу сделать, я на одной странице хочу выводить несколько файлов, но 1 файл будет выводиться дважды. То есть в исходном коде странице будет примерно так:

...
<span class="attachment"><a href="http://.../engine/download.php?id=1">Скачать</a></span>
<span class="attachment"><a href="http://.../engine/download.php?id=1">Скачать</a></span>
...
<span class="attachment"><a href="http://.../engine/download.php?id=2">Скачать</a></span>
<span class="attachment"><a href="http://.../engine/download.php?id=2">Скачать</a></span>
...


И вот мне надо что бы у первой ссылки с id=1 ставился class="test" data-link="название файла" (которое генерирует двиг - {$row['name']} ), а у второй ссылки с id=1 ставился просто class="test2".

Вот как то так, уже 2 день ломаю голову не как не могу придумать, незнание дает о себе знать(

oo22maxi
Юзер

oo22maxi - 30 августа 2013 15:36 -

Кстати, Exile, я попробовал твой написанный код, он работает но название файла я не смогу туда вставить.
Хотя, у меня появилась идейка, не знаю можно так или нет, но сейчас попробую это название {$row['name']} засунуть в такой тег {name} и подключить его к шаблону, а потом его засунуть в скрипт.

oo22maxi
Юзер

oo22maxi - 30 августа 2013 15:50 -

Плохая была идея...

Exile
Гости

Exile - 30 августа 2013 15:53 -

Тогда дай ссылкам id, так проще будет
Замени
$replace_1[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >Скачать</a></span>";
На это:
$replace_1[] = "<span class=\"attachment\"><a id=\"attachment\" href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >Скачать</a></span>";

И jquery будет вот такой:
$(document).ready(function(){
    $("a[id='attachment']:even").addClass("test2");
    $("a[id='attachment']:odd").addClass("test");
    $("a[id='attachment']:odd").attr("data-link", "link")
  });

oo22maxi
Юзер

oo22maxi - 30 августа 2013 16:25 -

Сделал все так как ты написал, работает, но опять есть но, название attachment в jquery не засунуть не как, мне так кажется. Вот я сейчас сижу и думаю, хрен с этим названием, будет для всех файлов с data-link одно ))

Спасибо большое тебе за помощь!

Exile
Гости

Exile - 30 августа 2013 16:28 -

А что вообще должно быть в data-link? Может что-нибудь можно придумать.

oo22maxi
Юзер

oo22maxi - 30 августа 2013 20:36 -

Название загружаемого файла. Если бы я не чего не менял в attachment, а оставил все стандартно (functions.php):

$replace_1[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >{$row['name']}</a> [{$size}] ({$lang['att_dcount']} {$row['dcount']})</span>";

*название файла выводится - {$row['name']};

то, загружаемый файл на странице выводился бы так
название_файла.exe [4,52 Mb] (скачиваний: 1)

исходный код страницы выглядел бы так
<span class="attachment"><a href="http://.../engine/download.php?id=1" >название_файла.exe</a> [4,52 Mb] (скачиваний: 1)</span>

Вот это "название_файла.exe" я и хотел что бы подставлялось в data-link, а в этом случае без php наверное не обойтись...

Exile
Гости

Exile - 31 августа 2013 00:43 -

Так это вообще просто же.
Меняй это:
$replace_1[] = "<span class=\"attachment\"><a id=\"attachment\" href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >Скачать</a></span>";
На это:
$replace_1[] = "<span class=\"attachment\"><a id=\"attachment\" data-link=\"{$row['name']}\" href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >Скачать</a></span>";
Ну и jquery:
$(document).ready(function(){
    $("a[id='attachment']:even").addClass("test2");
    $("a[id='attachment']:odd").addClass("test");
  });

Или тебе с чередованием выводить надо?

oo22maxi
Юзер

oo22maxi - 31 августа 2013 15:36 -

Да, именно с чередованием, если бы не чередование я бы даже вопросов не задавал )

Exile
Гости

Exile - 31 августа 2013 15:43 -

Тогда немного подправить jquery надо:
$(document).ready(function(){
    $("a[id='attachment']:even").addClass("test2");
    $("a[id='attachment']:odd").addClass("test");
    $("a[id='attachment']:odd").removeAttr("data-link");
  });

oo22maxi
Юзер

oo22maxi - 31 августа 2013 16:37 -

Во, работает так как прям я и хотел, спасибо еще раз!

У меня появился еще один вопросик, я забыл что у меня два блока вывода ссылок одних и тех же, а в каждом блоке разные стили кнопок скачать. Можно сделать так что бы скрипт работал только в блоке div с class="какой нибудь" или id="какой нибудь".

<div id="какой нибудь" или class="какой нибудь">
attachment
attachment
</div>


Если тебя не затруднит, то помоги, а то я тебя уже достал наверное со своими вопросами))

Exile
Гости

Exile - 31 августа 2013 17:04 -

$(document).ready(function(){
    $("#link-block a[id='attachment']:even").addClass("test2");
    $("#link-block a[id='attachment']:odd").addClass("test");
    $("#link-block a[id='attachment']:odd").removeAttr("data-link");
  });
Где link-block - id

oo22maxi
Юзер

oo22maxi - 31 августа 2013 17:21 -

Вот теперь я вообще рад, спасибо тебе Exile огромное за проделанную работу и потраченное время на меня!

Exile
Гости

Exile - 31 августа 2013 17:22 -

Да не за что :)
Как раз jquery подучил.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх