Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Usunięcie linku z img i ustawienie długości tekstu.
Forum PHP.pl > Forum > Przedszkole
krzysztof_kf
Witam serdecznie mam problem napisałem skrypt który pobiera z bloga który jest postawiony na wordpressie 3 najnowższe posty, wszystko jest ok działa dobrze
ale mam problem jak zrobic żeby nie linkowało mi w danym poscie do ścieżki grafiki, może jest jakaś funkcja która usuwa linka dla atrybutu img druga sprawa jest jak za pomocą funkcji substr zadeklarować ustawienie ilości znaków do wyświetlania próbowałem ale coś mi to nie wychodzi .

Poniżej przedstawiam mój skrypt.

  1. <?php
  2. mysql_connect("localhost", "root") or
  3. die ("Nie mozna połączyć się z MYSQL");
  4.  
  5. mysql_select_db("budrenoma-blog") or
  6. die ("Nie można się połączyć z baza danych budrenoma-blog");
  7.  
  8. $wynik = mysql_query("SELECT * FROM `wp_posts` WHERE `post_status`='Publish'")
  9. or die('Błąd zapytania');
  10.  
  11. if(mysql_num_rows($wynik) > 0) {
  12.  
  13. while($r = mysql_fetch_object($wynik)) {
  14. echo '<div class="blog">';
  15. echo "<h2>".$r->post_title."</h2>";
  16. echo "<p>".$r->post_content."</p>";
  17. echo "<a href=\"{$r->guid}\">Czytaj dalej</a>";
  18. echo "</div>";
  19. }
  20.  
  21. }
  22. ?>
gorden
w tym skrypcie nie ma żadnych prób rozwiązania Twoich problemów...
Bartłomiej Skwara
Wystarczy dodać tutaj dwie funkcje.

  1. <?php
  2. mysql_connect("localhost", "root") or
  3. die ("Nie mozna połączyć się z MYSQL");
  4.  
  5. mysql_select_db("budrenoma-blog") or
  6. die ("Nie można się połączyć z baza danych budrenoma-blog");
  7.  
  8. $wynik = mysql_query("SELECT * FROM `wp_posts` WHERE `post_status`='Publish'")
  9. or die('Błąd zapytania');
  10.  
  11. if(mysql_num_rows($wynik) > 0) {
  12.  
  13. while($r = mysql_fetch_object($wynik)) {
  14. $contentBezObrazow = preg_replace("/<img[^>]+\>/i", "", $r->post_content);
  15. echo '<div class="blog">';
  16. echo "<h2>".$r->post_title."</h2>";
  17. echo "<p>".substr($contentBezObrazow, 0, 200)."</p>";
  18. echo "<a href=\"{$r->guid}\">Czytaj dalej</a>";
  19. echo "</div>";
  20. }
  21.  
  22. }
  23. ?>
krzysztof_kf
Bartek dzięki za pomoc, ale nie do końca dobrze wytłumaczyłem o to chodzi że przy nakierowaniu myszką jest odnośnik do obrazka img czy dało by radę za pomocą wyrażenia regularnego usunąc linka do obrazka zachowując obrazek ?
Bartłomiej Skwara
Wybacz, nie zrozumiałem o co konkretnie biega.
Jeśli chcesz usunąć sam link, a pozostawić obrazki, to powinno zadziałać coś takiego:
  1. $contentBezObrazow = preg_replace(""/<\\/?a(\\s+.*?>|>)/"", "", $r->post_content);

krzysztof_kf
Dzięki wielkie bartek trochę ci się wkradł błąd z cudzysłowiamy, podaję już poprawiony może komuś się przyda .

  1. $contentBezObrazow = preg_replace("/<\\/?a(\\s+.*?>|>)/", "", $r->post_content);


Próbuję jeszcze za pomocą inkrementacji i pętli while ustawić możliwość ograniczenia wyświetleń postów może ma ktoś pomysł ?
ano
Kurde, po 1.070 postów jeszcze masz takie pytania?
Może to Cię zainteresuje http://php.net/manual/en/control-structures.for.php
  1. for ($i = 1; $i <= 10; $i++) {
  2. echo $i;
  3. }

lub
  1. $i = 0;
  2. $ile = 5;
  3. while(($r = mysql_fetch_object($wynik)) && ++$i<$ile) {
  4. ...
  5. }
piotrooo89
Cytat(krzysztof_kf @ 3.01.2012, 23:15:44 ) *
Próbuję jeszcze za pomocą inkrementacji i pętli while ustawić możliwość ograniczenia wyświetleń postów może ma ktoś pomysł ?


a nie lepiej już zrobić to po stronie zapytania za pomocą LIMIT?
krzysztof_kf
@piotrooo89 dobrze że mi o tym przypomniałeś ale z początku takie rozwiązanie sobie odpusciłem bo mi nie działało, więc wróciłem i udało taki efekt uzyskać jaki chciałem dzięki i pozdrawiam wszystkich .

Za pomocą jakiej komendy w tym zapytaniu mogę wyświetlac najnowsze posty ? chodzi mi o polecenie sql
Bartłomiej Skwara
Uzupełnij SELECT o sortowanie według konkretnego pola w konkretnym kierunku - ORDER BY.
  1. ORDER BY `pole_z_datą` DESC

Otrzymasz posty ułożone w kolejności dodania - od najnowszego.
krzysztof_kf
Wszystko fajnie ale te wyrażenie regularne za pomocą długości łańcucha substr pobiera wszystkie znaki łącznie ze wszystkim począwszy od linku, a ja potrzebuje uzyć funkcji substr od samego tekstu.


Ma ktoś jakieś propozycje rozwiązania tego problemu.
piotrooo89
pokaż jak masz teraz, co podajesz i co chcesz otrzymać.
krzysztof_kf
Na chwilą obecną mam tak przedstawione na rysunku :



za pomocą tego kodu

  1. <?php
  2. mysql_connect("localhost", "root") or
  3. die ("Nie można połączyć się z MYSQL");
  4.  
  5. mysql_select_db("budrenoma-blog") or
  6. die ("Nie można się połączyć z baza danych budrenoma-blog");
  7.  
  8. $wynik = mysql_query("SELECT * FROM wp_posts WHERE post_status='Publish' ORDER BY `post_date` DESC LIMIT 0, 3")
  9. or die('Błąd zapytania');
  10.  
  11. if(mysql_num_rows($wynik) > 0) {
  12.  
  13. while($r = mysql_fetch_object($wynik)) {
  14. $contentBezObrazow = preg_replace("/<\\/?a(\\s+.*?>|>)/", "", $r->post_content);
  15. echo '<div class="blox">';
  16. echo "<p><strong>".$r->post_title."</strong><br />";
  17. echo substr($contentBezObrazow, 0, 300);
  18. echo "<a href=\"{$r->guid}\">Czytaj dalej</a></p>";
  19. echo "</div>";
  20.  
  21. }
  22.  
  23. }
  24. ?>


i tutaj za pomocą wyrażenia regularnego usuwa mi link do zdjęcia, ale jest tutaj problem z funkcją susbtr zamiast ciąg znaków pobierać od samego tekstu to zaczyna pobierać łączny ciąg znaków razem z linkiem do obrazka .

Już nie mam pomysłu.
piotrooo89
a możesz pokazać jeszcze wygenerowany html:

  1. przed operacjami na stringu (czyli prosto z bazy)
  2. po tych operacjach na stringu
  3. i tak jakbyś Ty chciał żeby to było
krzysztof_kf
Udało się ale jest jeden mały problem chce usunąć znacznik /> na począku samej treści co trzeba dopisać do funkcji stristr żeby zaczynał ciąg od poprzedzających tych znaków />

Podgląd http://www.budrenoma.pl/blog

  1. <?php
  2. mysql_connect("sql.dede.pl", "budre", "dede") or
  3. die ("Nie mozna połączyć się z MYSQL");
  4.  
  5. mysql_select_db("budre") or
  6. die ("Nie można się połączyć z baza danych budrenoma-blog");
  7.  
  8. $wynik = mysql_query("SELECT * FROM wp_posts WHERE post_status='publish' ORDER BY `ID` DESC LIMIT 0, 3")
  9. or die('Błąd zapytania');
  10.  
  11. if(mysql_num_rows($wynik) > 0) {
  12.  
  13. while($r = mysql_fetch_object($wynik)) {
  14. $content = $r->post_content;
  15. $obraz = substr($content, 0, strpos($content, "/>"));
  16. $text = stristr($content, '/>');
  17. $text = substr($text, 0, 130);
  18. echo '<div class="blog">';
  19. echo "<span>".$r->post_title."</span>";
  20. echo "<img>".$obraz."</img>";
  21. echo "<p>".$text."</p>";
  22. echo "<a href=\"{$r->guid}\">Czytaj dalej</a>";
  23. echo "</div>";
  24. }
  25.  
  26. }
  27. ?>



Ma ktoś jakiś pomysł.
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.