Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Personaliznacja tekstu
Forum PHP.pl > Forum > PHP
Mery
Mam taki problem. Nie wiem jak zrobic taki skrypcik, ktory personalizowal by jakis tekst w zaleznosci od plci czytajacego.

Mozna by pisac tekst np w taki sposob:

Kod
Czy widział[eś/aś] ten dom?


i jakis sprypcik na podstawie chyba najlepiej wyrazenia regularnego zamienial by ten nawias [eś/aś] na eś jesli czytajacy to M lub aś jesli czytajacy do K.

Niestety na wyrazeniach regularnych sie nie znam sad.gif

Czy ktos wie jak takie cos napisac questionmark.gif
vala
pisz w formie bezosobowej:)
Morek
można zrobić skrypt ktory "na dzień dobry" zadawałby pytanie pan jest czy pani smile.gif a potem tego używał ale szczerze nie widze powodu... zabawa chyba nie jest warta świeczek.

Problem również zniknie gdy będzie logowanie na strone, ale tylko dla userów.

Lub tak jak mówi Vala pisz bezosobowo
kicaj
Jesli masz logowanie (konta uzytkownikow itp) to tam ustaw wymagane pole na plec. Pozniej bedziesz odpowiednim wyrazeniem strosowal 'widzial[as|es]'. Zakladajac ze pierwsza czesc jest dla chlopcow, a druga dla dziewczat:)

P.S. W podobnym stylu jak stosuje WikiMedia (np. http://wiki.php.pl) tyle, ze do linkow.
Mery
To wlasnie wiem, chodzi mi tylko o to odpowiednie wyrazenie biggrin.gif

Plec uzytkownika mam, teraz tylko trzeba wlasnie jakos zamienic koncowke na meska lub zenska i nie wiem jak to zrobic sadsmiley02.gif
vala
oznacz sobie string, ktory ma zamieniac w jakis specjalny sposob np:
<plec>

czyli bedzie cos takiego napisa<plec>(ł/ła)
i mozesz zastosowac preg_replace lub str_replace
ja bym info o plci wrzucil do sesji czy ciastek i na podstawie tego zamienial...
Mery
Zrobilem takie cos, dziala ale tylko wtedy gdy w tekscie jest tylko jeden raz forma osobowa:

  1. <?
  2. function personalizuj($string, $plec){  
  3.  
  4.  preg_match('/<(.*)!(.*)>/',$string, $koncowka);
  5.  
  6.  $wynik = preg_replace('/<(.*)!(.*)>/',$koncowka[$plec],$string);
  7.  
  8.  return $wynik;
  9.  
  10. }
  11.  
  12. $string = 'Czy chciał<byś!abyś> mieć taki dom?';
  13.  
  14.  
  15. echo personalizuj($string, 1);
  16.  
  17. ?>


jesli parametr plec wynosi 1 to daje pierwsza koncowke (meska) a jesli 2 to daje 2 koncowke. Niestety totanie nie dziala jesli w tekscie musi kilka razy zamienic koncowki.

Nie wiem w jaki sposob wyseparowac te koncowki z tekstu sadsmiley02.gif

Ma ktos jakis pomysl jak by to mialo wygladac questionmark.gif
tiraeth
to zamień preg_match na preg_match_all i potem zrób to samo ale w pętli smile.gif

poza tym lepiej zrobić taki string:
Kod
Czy chciał<!a>być mieć taki dom?


A spróbuj z tym wyrazem: mógłbyś
Mery
Nie bardzo kumam gdzie tu wcisnac petle, jakies dziwne rzeczy mi wychodza.

Mógłbyś napisac kod jak to powinno wygladac questionmark.gif
tiraeth
Proszę bardzo smile.gif Gotowa funkcja:
  1. <?php
  2. function personalizuj($string, $plec)
  3. {
  4.  $wzor = '/<([a-z]{0,})!([a-z]{0,})>/';
  5.  
  6.  if(preg_match_all($wzor, $string, $koncowki))
  7.  {
  8. $wynik = str_replace($koncowki[0], $koncowki[$plec], $string);
  9.  }
  10.  
  11.  return $wynik;
  12. }
  13. ?>


Zmieniłem trochę wyrażenie regularne. I zamieniamy nie preg_replace'm tylko str_replace'm smile.gif
matid
Niestety, przy polskich znakach [a-z] chyba nie przejdzie, a przy kodowaniu np utf-8 na 100% będą błędy. A tak wogóle, to po co tak komplikować tę funkcję, jakieś nie potrzebne preg_match_all, nie rozumiem tego. Nie można tak:

Coś się kolorowanie sypie, ale kod dziala:
Kod
<?php

    function personalize( $sString, $iGender )
    {
        return preg_replace( '/\<(\S*)\!(\S*)\>/', '\\' . (int) $iGender, (string) $sString );
    }
    
    $sString = 'Czy chciał<byś!abyś> mieć taki dom? Czy m<ógł!ogła>byś kupić mleko?';
    
    echo '<strong>Mężczyzna:</strong></br />';
    echo personalize( $sString, 1 );
    echo '<br /><strong>Kobieta:</strong><br />';
    echo personalize( $sString, 2 );
    
?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.