To jest tylko wersja do druku, aby zobaczyć pełną wersję tematu, kliknij TUTAJ
phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

HTML/PHP/AJAX/JS - [php] BBcode [age]

Lorgan - 01-04-2017, 21:27
Temat postu: [php] BBcode [age]
Witam,

Próbuję przygotować nowy BBcode, który spełniałby prostą funkcję: odejmował wartość wpisaną w tag od aktualnego roku.

Przykład:
[age=17], dałoby w roku 2017-stym 2000, a w 2020-stym 2003.

Póki co, przygotowałem:

includes/bbcode.php
Kod:
    $text = str_replace("[year]", "[year:$uid]", $text);
      $current_year = (int)date('Y');
      $tenchi_year = $current_year - 400;
      $text = str_replace("[year:$uid]", $tenchi_year, $text);
     
      $text = preg_replace("#\[age=([1-9]?[0-9])\]#si", "[age=\\1:$uid]", $text);
      if (strpos($text, "[age=12:$uid]"))
      {
            $age_mod = 12;
      }
            else
      {
            $age_mod = $tenchi_year;
      }
      $age = $tenchi_year - $age_mod;
      $text = preg_replace("/\[age=([1-9]?[0-9]):$uid\]/si", $age, $text);

Niestety utknąłem i nie mam pomysłu, jak to pociągnąć dalej. Nie chcę definiować każdej wartości z osobna, tylko użyć tego, co zostało wpisane po "age=". Niestety nie wiem, jak wcisnąć tę wartość do zmiennej :/

Czy znalazłby się ktoś tak dobry, żeby mi pomóc? :roll:

PS. Tag [year] napisałem przy okazji.

Pozdr.

[ Dodano: 18-05-2017, 23:47 ]
Udało mi się wreszcie przygotować działający kod. Rok urodzenia wpisuje się między tagi [age][/age]. Niestety, obliczenie wieku wykonuje się tylko raz na post. Jeśli ktoś potrafi i chce mi pomóc to przerobić tak, żeby działało na dowolną ilość tagów, będę zobowiązany.
Kod:
    // Year (Tenchi PBF)
    $text = str_replace("[year]", "[year:$uid]", $text);
      $current_year = (int)date('Y');
      $tenchi_year = $current_year - 400;
      $text = str_replace("[year:$uid]", $tenchi_year, $text);
     
      // Charater Age (Tenchi PBF)
      $text = str_replace("[age]", "[age:$uid]", $text);
      $text = str_replace("[/age]", "[/age:$uid]", $text);
    $age_start = "[age:$uid]";
    $age_end   = "[/age:$uid]";
    $age_val = $text;
    $age_output = strstr(substr($age_val, strpos($age_val, $age_start) + strlen($age_start)), $age_end, true);
    $age_total = $tenchi_year - $age_output;
    $text = preg_replace("#\[age:$uid\](.*?)\[/age:$uid\]#si", $age_total, $text);

Pozdr.

[ Dodano: 20-05-2017, 11:22 ]
Udało mi się wreszcie poradzić z problemem. Przedstawiam kompletny kod:
Kod:
    // Year (Tenchi PBF)
    $text = str_replace("[year]", "[year:$uid]", $text);
      $current_year = (int)date('Y');
      $tenchi_year = $current_year - 400;
      $text = str_replace("[year:$uid]", $tenchi_year, $text);
     
      // Charater Age (Tenchi PBF)
      $text = preg_replace_callback(
    "(\[age\](.*?)\[/age\])is",
    function($m) {
        static $id = 0;
        $id++;
        return "[age:sid".$id."]".$m[1]."[/age:sid".$id."]";
    },
    $text);
    $text = preg_replace("#\[age:(.*?)\](.*?)\[/age:(.*?)\]#si", "[age:\\1:$uid]\\2[/age:\\3:$uid]", $text);
    foreach (range(1, 200) as $sid)
    {
        $age_start = "[age:sid$sid:$uid]";
        $age_end   = "[/age:sid$sid:$uid]";
        $age_output = strstr(substr($text, strpos($text, $age_start) + strlen($age_start)), $age_end, true);
        if (!filter_var($age_output, FILTER_VALIDATE_INT) === false)
        {
            $age_total = $tenchi_year - $age_output;
            $text = preg_replace("#\[age:sid$sid:$uid\](.*?)\[/age:sid$sid:$uid\]#si", $age_total, $text);
        }
        else
        {
            $text = preg_replace("#\[age:sid$sid:$uid\](.*?)\[/age:sid$sid:$uid\]#si", "[age]\\1[/age]", $text);
        }
    }

Pozdr.



Powered by phpBB modified by Przemo © 2003 phpBB Group