Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak aktywować linki?
Forum PHP.pl > Forum > Przedszkole
julss
Jestem w 'Przedszkolu' bo niestety nie znam się na programowaniu.
Mam gotowy kod strony.
Newsy są wgrywane na stronę przez Panel Admin (własna kreacja programisty).

Niestety w wyświetlanych Newsach linki nie są aktywne thumbsdownsmileyanim.gif
Jak zmienić kod by były??

Wklejam fragment kodu:

Kod
<?php

        ob_start();
        
        include_once '../include/headers.php';
        include_once '../include/classes/mysql.class.php';
        include_once '../include/functions_de.php';
        
        print file_get_contents('../include/html/header.html');
        
        ?>

<?php
                        
                                $operation = new OperationsMySQL();
                                $operation->connect();
                                
                                if(!isset($_GET['id']))
                                
                                {
echo '<div class="small_news">';                
                $query = "SELECT id, regdate, title, info_small FROM newsesde WHERE visible = '1' AND (regdate >= '" . date('Y-m-d') . "'
OR regdate <= regdate_end AND regdate_end >= '" . date('Y-m-d') . "')  ORDER BY regdate ASC LIMIT 9";
                $operation->execute_query($query);
    
               while($row = $operation->fetch_object())                
                {
                print '<div class="top_news">' . "\n";
                        if(file_exists('../admin-news-de/news-images/' . $row->id . '.jpg'))
                        {
                        
                        print '
<div class="imgs" >
    <table height="161" align="center" width="100%">
        <tr>
            <td align="center" valign="middle" class="img_block"><img src="../admin-news-de/news-images/' . $row->id . '.jpg" alt="" /></td>
        </tr>
    </table>
</div>';
                        
                        }
                        
                        print '
                        <p class="news_date" style="margin-bottom: 10px; width: 250px;">
                        ' . date('d.m.Y', strtotime($row->regdate)) . '</p>' . "\n";
                        print '                                                
                        <p class="title_top">';
                      echo '  <a href="?id=' . $row->id . '">' . $row->title . '</a></p>';
                        
                        
                        print '                                        
                        </div>' . "\n";
                        
                        $last_date = $row -> regdate;
                }
                
             $operation->free_result();
    echo '</div>';
    
    if($last_date < date('Y-m-d')){$last_date = date('Y-m-d');}
    
                                                echo $output;
                                                print '                                        <hr id="news_line" />' . "\n";
                                                $query2 = "SELECT id, regdate, title, info_small FROM newsesde WHERE visible = '1'
AND (regdate >= '" . date('Y-m-d') . "' OR regdate <= regdate_end AND regdate_end >= '" . date('Y-m-d') . "')  ORDER BY regdate ASC LIMIT 9";
                                                $operation->execute_query($query2);
                                                
                                                print '<p style="clear: both;"></p>';
                                                print '                                        <ul class="ul_no_list ">' . "\n";
                                                $output="";
                                                $news = 0;
                                                while($row = $operation->fetch_array())
                                                {
                                                    if($news > 9){
                                                    extract($row);
                                                        $output .= '                                                        <li class="regdate">' . date('d.m.Y', strtotime($regdate)) . '</li>                                                        
<li class="title"><a href="?id=' . $id . '">' . $title . '</a></li>                                                        <li class="info_small">' . $info_small . '</li>';
                                                    }
                                                    $news++;
                                                }
                                                echo $output;
                                                print '                                                </ul>' . "\n";
                                                }
                                        else
                                        {
                                        $query = sprintf("SELECT id, regdate, title, info_small, info FROM newsesde WHERE id = '%d' AND visible = '1' LIMIT 1", mysql_real_escape_string($_GET['id']));
                                                $operation->execute_query($query);
                                                $row = $operation->fetch_object();
                                                
                                                print '<p id="news_date_p"><span class="news_date">' . date('d.m.Y', strtotime($row->regdate)) . '</span></p>' . "\n";
                                                print '                                        <p class="text_link">' . $row->title . '</p>' . "\n";
                                                print '                                        <p class="text_normal">' . nl2br($row->info) . '</p>';
                                                print '                                        <p class="back"><a href="index.php">&lt;&lt; zurück</a></p>' . "\n";
                                        }
                        
                                        ?>
patrysiek2
Jak to nie aktywne? NKPW
Ruch Radzionków
a masz gdzies demo na jakiejś stronie żeby zobaczyć co i jak questionmark.gif
julss
Oto przykład:
News został wgrany razem z linkiem do forum.php.pl
Ale link nie jest aktywny...
LINK
markonix
Linki same z siebie nie zrobią się aktywne, PHP wyświetla tekst, a przeglądarka nie interpretuje tego jako link (być może są jakieś co to robią).
Albo przy dodawaniu użyjesz HTML przy dodawaniu linku, albo system ma wbudowane BBC, albo możesz zrobić w PHP aby automatycznie linki były zmieniane w HTMLowe za pomocą wyrażeń regularnych.
AdIoS_Neo
Witam,
link nie jest nieaktywny jak to określiłeś, on w ogóle nie jest linkiem tylko tekstem. W html'u link (odnośnik) wstawiamy następująco:
  1. <a href="adres_strony.html" title="tytul strony ktory pojawi sie w dymku po najechaniu na odnosnik">Wyświetlany tekst na który się klika by przejść do strony o podanym adresie</a>

Więc by zmienić napis typu http://forum.php.pl na link w Twoim przykładzie trzeba by użyć preg_replace, wyciągnąć z treści newsa wszystkie adresy i pozamieniać je na linki htmlowskie.
julss
Najfajniej jakby linki stawały się aktywne automatycznie.

Jak działa ta opcja matronix?: smile.gif
Cytat
możesz zrobić w PHP aby automatycznie linki były zmieniane w HTMLowe za pomocą wyrażeń regularnych.
AdIoS_Neo
zmień
  1. nl2br($row->info)
na
  1. nl2br(preg_replace("/(http(s)?\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(\/)?)/i", '<a href="\1">\1</a>', $row->info))

zmieni Ci to linki ale tylko prowadzące do stron głównych np:
Kod
http://forum.php.pl
ale już nie dopasuje tego:
Kod
http://forum.php.pl/index.php?showtopic=200175&st=0&gopid=969547&#entry969547
markonix
  1. function clickableLinks($source) {
  2.  
  3. $m = preg_match_all('/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/', $source, $match);
  4.  
  5. if ($m) {
  6. $links = $match[0];
  7. for ($j = 0; $j < $m; $j++) {
  8. if (preg_match('/http:\/\/JAKAS.STRONA.PL/i', $links[$j])) {
  9. $title = 'Link do podstrony';
  10. } else {
  11. $title = 'Link zewnętrzny!';
  12. }
  13. $source = str_replace($links[$j], '<a href="'. $links[$j] .'" title="'. $title .'">'. $links[$j] .'</a>', $source);
  14. }
  15. }
  16.  
  17. return $source;
  18.  
  19. }


JAKAS.STRONA.PL zamień na swój adres. Funkcja oprócz tego, że zamienia tekst na linki to dodatkowo do nich dokleja tytuł "link do podstrony" bądź "link zewnętrzny".
AdIoS_Neo
@markonix: przetestuj swoje wyrażenie regularne na tym:
Kod
$zrodelko = "https://www.google.pl<p class='text_normal'>Nieaktywny link:\n\nhttp://forum.php.pl/</p><p>http://www.google.pl</p><ul><li>http://za.je.biste.pl/</li></ul> http://www.li-nk.pl/?p=24 <a href='http://test.pl/'>test</a>";
markonix
Nie mam zamiaru nic testować bo
1) przyjmuje za argument tekst wyczyszczony ze znaczników HTML
2) samo wyrażenie regularne nie jest w pełni mojego autorstwa
3) jeżeli funkcja jest zawodna to zainteresowany sobie ją poprawi i dopasuje, u mnie się sprawdza na ten moment w 100%
4) podałem funkcje w celach wzorcowych, niekoniecznie żeby stosować bez zastanowienia.
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.