Пропуск цикла повторяющейся границы

Тема в разделе "Функции и интерфейс программы", создана пользователем vatnick, 15 ноя 2014.

  1. vatnick

    vatnick New Member Пользователи

    Регистрация:
    27 мар 2014
    Сообщения:
    30
    На странице есть несколько описаний, но нам нужны только те которые не содержат в тексте слова WWW. Далее применяем такую конструкцию в шаблоне повторяющихся границ. Помимо этого, нам нужно под id выводить порядковый номер описания, т.е. номер сработавшей повторяющейся границы. Для этого вместо id мысленно подставим [CC2] или [CC]:

    Код:
    [IF1][GRAN7][TEXTEQUAL]WWW[THEN][ELSE]
    name_id_[GRAN1]
    link_id_[GRAN2]
    image_id_[GRAN3]
    [/IF1]
    В итоге, если скажем 1 и 2 описание пропускается по условию, а 3 и 4 нам подходит, то получится такая штука:
    Код:
    name_3_[GRAN1]
    link_3_[GRAN2]
    image_3_[GRAN3]
    
    name_4_[GRAN1]
    link_4_[GRAN2]
    image_4_[GRAN3]
    А надо-то чтобы было 1 и 2! Соответственно, можно ли использовать какой-то макрос чтобы повторяющаяся граница была пропущена и СС не срабатывал или обойтись каким-то другим способом?
     
  2. vatnick

    vatnick New Member Пользователи

    Регистрация:
    27 мар 2014
    Сообщения:
    30
    Пока набросал такое решение на PHP, минус в том что работает ооччень долго и не уверен что в данном виде справится с многопоточностью.

    Итак что мы пишем в повторяющиеся границы:
    Код:
    [IF1][GRAN7][TEXTEQUAL]WWW[THEN][ELSE]
    name_<PHP_SCRIPT=http://localhost/CC.php[UTF-8]></PHP_SCRIPT>_[GRAN1]
    link_<PHP_SCRIPT=http://localhost/CC.php[UTF-8]></PHP_SCRIPT>_[GRAN2]
    image_<PHP_SCRIPT=http://localhost/CC.php[UTF-8]></PHP_SCRIPT>_[GRAN3]
    <PHP_SCRIPT=http://localhost/CC.php[UTF-8]>plus=[DATAENCODE][/DATAENCODE]</PHP_SCRIPT>
    [/IF1]
    Это пишем в шаблоне
    Код:
    <CD_CYCLE_GRAN_1!>
    <PHP_SCRIPT=http://localhost/CC.php[UTF-8]>delete=[DATAENCODE][/DATAENCODE]</PHP_SCRIPT>

    Ну и сам CC.php
    Код:
    <?
    
    $file = 'number.txt'; //мне кажется что для многопоточности нужно давать уникальное имя
    // Открываем файл для получения существующего содержимого
    $current = file_get_contents($file);
    if($current==FALSE) { $current=1; }
    if(isset($_POST['plus']))$current=$current+1;
    if(isset($_POST['delete'])) {$current="";}
    // Пишем содержимое обратно в файл
    echo "$current";
    file_put_contents($file, $current);
    ?>
    Можно было обойтись вызывая скрипт только 1 раз, с использованием [VAR], но похоже что значение переменной нельзя перезаписать.
     
  3. vatnick

    vatnick New Member Пользователи

    Регистрация:
    27 мар 2014
    Сообщения:
    30
    Сделал пока так
    Код:
    [VAR][SET:count[CC2]]<PHP_SCRIPT=http://localhost/CC.php[UTF-8]>id=[DATAENCODE][INT_ID][/DATAENCODE]</PHP_SCRIPT>[/SET][/VAR]
    ...
    <PHP_SCRIPT=http://localhost/CC.php[UTF-8]>plus=[DATAENCODE][/DATAENCODE]
    id=[DATAENCODE][INT_ID][/DATAENCODE]</PHP_SCRIPT> 
    Код:
    <?
    $file = "stuff/".$_POST['id'];
    // Открываем файл для получения существующего содержимого
    $current = @file_get_contents($file);
    if($current==FALSE) {$current=1; }
    if(isset($_POST['plus'])){  $current=$current+1;}
    
    // Пишем содержимое обратно в файл
    echo "$current";
    file_put_contents($file, $current);
    
    ?>
     
  4. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Здравствуйте.

    Пока нет.

    С уважением к вам, Сергей.
     
  5. vatnick

    vatnick New Member Пользователи

    Регистрация:
    27 мар 2014
    Сообщения:
    30
    Сергей, скажите, а можно ли сделать индивидуальные разделители повторяющихся границ парсинга? Где-то новая строка подойдет, в другом месте нужна запятая и т.д. Спасибо
     
  6. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Shift+ctrl+5 ->
    Где нужный_разделитель - нужный вам разделитель.
     
  7. vatnick

    vatnick New Member Пользователи

    Регистрация:
    27 мар 2014
    Сообщения:
    30
    Т.е. так? Но ведь тогда получается что типа 1;2;3; а нужно 1;2;3

    [​IMG]
     
  8. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.431
    Адрес:
    Latvia
    удалите окончание заменой
    Код:
    [REPLACE(re:;$|)]<CD_CYCLE_GRAN_1!>[/REPLACE]
    ---
    Вообщето правильнее вместо разделителя циклов указывать свою метку которую потом менять последним макросом замены.
    Ставите в разделитель циклов чтото уникальное ^^ и в шаблоне вывода остается указать для повт.границы желаемый разделитель
    Код:
     [REPLACE(^^|[CSVCS])]<CD_CYCLE_GRAN_1!>[/REPLACE]
     
    Последнее редактирование: 15 ноя 2014

Поделиться этой страницей