Jump to content
  • 0

удаление кода


jurassik
 Share

Question

в коде РНР есть переменная X

и происходит вывод контента из БД вида:

<div class="A">text1</div>

<div class="B">text2</div>

<div class="A B">text3</div>

как сделать чтобы блоки в который класс != Х были удалены.

т.е. если Х=А то

<div class="A">text1</div>

<div class="A B">text3</div>

если Х=В то

<div class="B">text2</div>

<div class="A B">text3</div>

Link to comment
Share on other sites

17 answers to this question

Recommended Posts

  • 0

в коде РНР есть переменная X

и происходит вывод контента из БД вида:

<div class="A">text1</div>

<div class="B">text2</div>

<div class="A B">text3</div>

как сделать чтобы блоки в который класс != Х были удалены.

т.е. если Х=А то

<div class="A">text1</div>

<div class="A B">text3</div>

если Х=В то

<div class="B">text2</div>

<div class="A B">text3</div>

ну есть 2 варианта , 1ый легче - это не удалять , а наоборот рисовать див


<? // if (условие какое вам надо)
echo '<div class="A">text1</div>';
else
echo '<div class="B">text1</div>';

и второй вариант , это замена :


<?
$divs = '<div class="A">text1</div>
<div class="A B">text3</div>';
// if (условие какое вам надо)
$divs = str_replace ('class="A"' , 'class="B"', $divs);
echo $divs;

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

<?
echo '<div class="'. $X .'">text1</div>
<div class="A B">text3</div>';

Edited by crautcher
  • Like 1
Link to comment
Share on other sites

  • 0

А при чём тут переменная X?

Тут вариант или при генерации удалять при помощи регулярки или генерировать CSS (или яваскрипт)

сейчас есть скрипт, но хотелось элегантней

с регулярными выражения у меня туго

ну есть 2 варианта , 1ый легче - это не удалять , а наоборот рисовать див


<? // if (условие какое вам надо)
echo '<div class="A">text1</div>';
else
echo '<div class="B">text1</div>';

и второй вариант , это замена :


<?
$divs = '<div class="A">text1</div>
<div class="A B">text3</div>';
// if (условие какое вам надо)
$divs = str_replace ('class="A"' , 'class="B"', $divs);
echo $divs;

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

<?
echo '<div class="'. $X .'">text1</div>
<div class="A B">text3</div>';

блоки выводятся все сразу - берутся из базы: $item->text

как я понимаю поиск в строке text = $item->text совпадения %Х%, и присваивание text = "div class='%X%'>" . от %Х% с символа '>' до символа '<' ."</div>"

если ход моих мыслей верен то

пока поиск в text не дошел до конца {

поиск в строке text %X%, удаление все до %X%

text = удаление все до >

$del = text удаление всего поле первого '<'

$T .= 'div class="%X%"'. $del .'</div>'

}

echo $T

Edited by jurassik
Link to comment
Share on other sites

  • 0

jurassik, а можешь вообще описать что у тебя происходит? Мне кажется изначально задача стоит не та. Просто не могу понять зачем выводить всё чтобы потом половину удалить..

С другой стороны, если ты хочешь удалить всё что не равно Х, то не боишься что ты удалишь весь сайт, а в BODY у тебя останутся только пара контейнеров? :rolleyes:

  • Like 1
Link to comment
Share on other sites

  • 0

jurassik, а можешь вообще описать что у тебя происходит? Мне кажется изначально задача стоит не та. Просто не могу понять зачем выводить всё чтобы потом половину удалить..

есть статьи,

в каждой статье много блоков div с классами А,В,С и т.д.

когда находимся на странице конкретной статьи, то видим весть контент статьи - все блоки.

когда находимся в разделе АА, то видим статьи, но контент выводится только блоков А

С другой стороны, если ты хочешь удалить всё что не равно Х, то не боишься что ты удалишь весь сайт, а в BODY у тебя останутся только пара контейнеров? :rolleyes:

я же работать буду со строкой статьи, а не со всем кодом странице. наверно я неправильно назвал тему: "работа со строками"

Edited by jurassik
Link to comment
Share on other sites

  • 0

так если у тебя материал в базе, то вообще-то сразу получать нужное. Если АА то получаешь только А, если ВВ то только В

Или у тебя сайт на чистом HTML написан?

Могу тебе посоветовать воспользоваться jQuery. Там отлично можно с этим разобраться

Link to comment
Share on other sites

  • 0

в коде РНР есть переменная X

и происходит вывод контента из БД вида:

<div class="A">text1</div>

<div class="B">text2</div>

<div class="A B">text3</div>

как сделать чтобы блоки в который класс != Х были удалены.

т.е. если Х=А то

<div class="A">text1</div>

<div class="A B">text3</div>

если Х=В то

<div class="B">text2</div>

<div class="A B">text3</div>

Много букв в посте, всё не осилил, так и не понял решили задачу или нет, но из того что хотелось, решение «в лоб»:


$class = 'B';
$html = '<div class="A">text1</div>
<div class="B">text2</div>
<div class="A B">text3</div>';

preg_match_all('/<div class=".*?'.$class.'.*?">.*?<\/div>/', $html, $str);

Echo "<p>Div'ы с Class'ом: ".$class."</p>\n";

foreach($str[0] as $div) { Echo $div."\n"; }

  • Like 1
Link to comment
Share on other sites

  • 0

ну так ты по какому-то принципу хранишь статьи? например:

- идентификатор

- идентификатор раздела

- название

- контекст

- дата

Значит и вытягиваешь из базы нужные статьи конкретного раздела

Link to comment
Share on other sites

  • 0

Много букв в посте, всё не осилил, так и не понял решили задачу или нет, но из того что хотелось, решение «в лоб»:


$class = 'B';
$html = '<div class="A">text1</div>
<div class="B">text2</div>
<div class="A B">text3</div>';

preg_match_all('/<div class=".*?'.$class.'.*?">.*?<\/div>/', $html, $str);

Echo "<p>Div'ы с Class'ом: ".$class."</p>\n";

foreach($str[0] as $div) { Echo $div."\n"; }

а $div откуда берется?

- идентификатор

- идентификатор раздела

- название

- контекст

- дата

Значит и вытягиваешь из базы нужные статьи конкретного раздела

статьи не принадлежат разделам,

вытаскивать не статьи раздела, а "контент раздела"

Link to comment
Share on other sites

  • 0

Много букв в посте, всё не осилил, так и не понял решили задачу или нет, но из того что хотелось, решение «в лоб»:


$class = 'B';
$html = '<div class="A">text1</div>
<div class="B">text2</div>
<div class="A B">text3</div>';

preg_match_all('/<div class=".*?'.$class.'.*?">.*?<\/div>/', $html, $str);

Echo "<p>Div'ы с Class'ом: ".$class."</p>\n";

foreach($str[0] as $div) { Echo $div."\n"; }

а $div откуда берется?

foreach($str[0] as $div) { Echo $div."\n"; }

$str - массив найденых div'ов по образцу регулярного выражения из блока $html

$div - это каждый отдельный блок (т.е. член массива $str)

  • Like 1
Link to comment
Share on other sites

  • 0

jurassik, ты меня прям заинтриговал :) Извиняюсь сразу за отвлечение от темы, но очень интересно услышать как у тебя организовано всё, как всё хранится, как ты разбираешь всё по разделам? Как то не обычно

Link to comment
Share on other sites

  • 0

jurassik, ты меня прям заинтриговал :) Извиняюсь сразу за отвлечение от темы, но очень интересно услышать как у тебя организовано всё, как всё хранится, как ты разбираешь всё по разделам? Как то не обычно

каталог производителей мебели.

есть производители мебели, один и тот же производитель может производить несколько вариантов мебели (кухни, диваны т.д.)

требования:

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

каждый производитель выглядит как контент, фото касающихся только кухонь.

заходим в конкретного производителя и видим все его варианты мебели (кухни, диваны..)

как работает:

сайт на Joomla К2,

производитель А производит мебель кухни и диваны

в материале производителя А делам два блока div с классами "kuhni", "divani"

присваиваем материалу А теги K2 'kuhni' и 'divani'

раздел кухни выводится через тег К2 'kuhni'

т.е. мы увидим производителей отмеченные этим тегом, но увидим их полный контент (и диваны тоже)

поэтому в данный момент контент диваны удаляются скрипом jquery

Link to comment
Share on other sites

  • 0


preg_match_all('/<div class=".*?'.$class.'.*?">.*?<\/div>/', $html, $str);
echo "<p>Div'ы с Class'ом: ".$class."</p>\n";
foreach($str[0] as $div) { echo $div."\n"; }

эта функция как раз мне и нужна. спасибо.

но не срабатывает почему-то(

уже обрезал код до


preg_match_all($class, $html, $str);
foreach($str[0] as $div) { echo $div."\n"; }

проверил в $html есть $class, а на выходе ничего.

может у меня на хостере php не поддерживает эту функцию?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy