Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Jak zatrzymać pobieranie danych za pomocą flagi za pomocą php?
Forum PHP.pl > Forum > Przedszkole
joka2
Witam,
czy ktoś z Was spotkał się z takim oto prostym problemem?

Posiadam dane w bazie. Są to moje artykuły i posty. Mój blog, prowadzony na darmowym skrypcie wordpress. Ze względu na wytworzone przez googla ciśnienie tworzę sobie mobilną wersję bloga. Obecnie jestem w trakcie wyrzucania danych na stronę. Pozostało mi tylko jedna malutka rzecz. Opiszę to moimi słowami:

  1. Zatrzymaj pobieranie danych z bazy, gdy napotkasz coś takiego: <!--more-->.


Proste, ale nie udało mi się, jak do tej pory, znaleźć rozwiązania powyższego problemu.
Próbowałem już zamiany <!--more--> na jakieś tagi, jak <br>:

  1. $p = $dane_z_bazy;
  2. $p = str_replace("<!--more-->","<br>",$p);
  3. echo $p;


ale dobrze wiem, że łamanie linii, nic tu nie da.

Poszukuję czegoś takiego, jak STOP, gdy w bazie znajdzie się zwrot: <!--more--> Lub: zatrzymaj pobieranie danych z bazy i zamień <!--more--> na link do pełnego artykułu.

Jak by ktoś mógł pochylić się nad moim problemem i wskazać mi drogę, bym był bardzo wdzięczny.
gorden
Jeśli masz dostęp do T-SQL, możesz to zrobić w jednym zapytaniu w ten sposób
  1. SELECT LEFT(tresc, charindex('<!--more-->', tresc) - 1) FROM artykuly


jeśli chodzi o PHP, str_replace tutaj nie pomoże, bo tylko usunie podany w argumencie fragment.
Polecam użyć preg_replace:
  1. $tresc = preg_replace("/<!--more-->(.*)/", "", $tresc);
joka2
Dziękuję za odpowiedź.

Właśnie jestem w trakcie zgłębiania preg_replace ponieważ odpowiedź z supportu była negatywna, co do Transact-SQL. Jak na razie zagmatwane. W trakcie poszukiwań na stronie http://php.net/preg_replace natknąłem się na ciekawy trick dla SEO. Zamiana stringu na SEO friendly:

  1. <?php
  2. $realname = "This is the string to be made SEO friendly!";
  3. $seoname = preg_replace('/\%/',' percentage',$realname);
  4. $seoname = preg_replace('/\@/',' at ',$seoname);
  5. $seoname = preg_replace('/\&/',' and ',$seoname);
  6. $seoname = preg_replace('/\s[\s]+/','-',$seoname); // Strip off multiple spaces
  7. $seoname = preg_replace('/[\s\W]+/','-',$seoname); // Strip off spaces and non-alpha-numeric
  8. $seoname = preg_replace('/^[\-]+/','',$seoname); // Strip off the starting hyphens
  9. $seoname = preg_replace('/[\-]+$/','',$seoname); // // Strip off the ending hyphens
  10. $seoname = strtolower($seoname);
  11. echo $seoname;
  12. ?>

Ciekawe, czy dałoby się to napisać w jednej linii? Albo najlepiej w funkcji wink.gif Przepraszam za Offtop ohno-smiley.gif

Wracając do tematu. Twoja propozycja zamiany:
  1. <!--more-->(.*)

na:
  1. ""

w linii:
  1. $tresc = preg_replace("/<!--more-->(.*)/", "", $tresc);

działa tylko na <!--more-->. Nie wyświetla się. Reszta danych z bazy, niestety, już się ładnie wyświetla na stronie, czego nie chcę. Możliwe, że powinienem zamienić (.*) na inny ciąg znaków? Dodam, że są tam tagi html. Chciałbym, aby <!--more--> było taką flagą, która blokowałaby wyświetlane danych na stronie.

No nic, szukam dalej.


Obszedłem problem sposobem, który kiedyś wykorzystałem w moim autorskim katalogu stron.

  1. $str = $dane_z_bazy;
  2. $length = 200;
  3. $tmp['length'] = strlen($str);
  4. if($tmp['length'] > $length)
  5. {
  6. while($str[$length] != ' ' && ++$length < $tmp['length']);
  7. echo substr($str, 0, $length);
  8. echo '... ';
  9. echo '<a href="'.$link_do_calego_artykulu .'">Poczytaj&nbsp;sobie&nbsp;dalej...</a>';
  10. }


Uciąłem dane po wyświetleniu 200 znaków. Nie to mnie dziś interesowało, ale na razie wystarcza biggrin.gif Dziękuę za pomoc i pozdrawiam!
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.