Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][MySQL][PHP]Jak zatrzymać pobieranie danych za pomocą flagi za pomocą php?, Wyrzucić z bazy dane, do momentu, aż osiągnie flagę.
joka2
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 6.07.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
gorden
post
Post #2





Grupa: Zarejestrowani
Postów: 486
Pomógł: 101
Dołączył: 27.06.2010

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
joka2
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 6.07.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/wink.gif) Przepraszam za Offtop (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/biggrin.gif) Dziękuę za pomoc i pozdrawiam!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 04:53