Problem z kodem skracania newsów


(Darom82) #1

Czy może mi ktoś pomóc dopasować poniższy kod :

/**

* Ucinanie tekstu po $n znakach. Gdy pozycja wcięcia wystąpi w połowie wyrazu, przesunie ją poza wyraz

* @param {string} $str Tekst wejściowy

* @param {int} $n Ilość znaków po której ucinamy tekst

* @param {string} $d Tekst wstawiany za uciętym tekstem. Domyślnie wielokropek

* @return {string} Ucięty tekst

*/

function str_cut ($str, $n, $d='…') {

    $str = strip_tags($str);

    if (mb_strlen($str, 'utf-8') > $n) {

        preg_match('/(.{' . $n . '}.*?)\P{L}/u', $str, $m);

        return rtrim($m[1]) . $d;

    }

    return $str;

}


echo str_cut("Zażółć gęślą jaźń. Pchnąć w tę łódź jeża lub ośm skrzyń fig", 25);

Do tego kodu mojego:

<?php

  error_reporting(E_ALL);

  $template = 'plik.txt';

  $fd = fopen($template,"r");

  $message = @fread($fd, filesize($template));


  $piece=explode("$$$",$message);



  function cut_comment($str,$ile) {

  $count = str_word_count($str);

  if ($count >$ile) {

  $body = explode(" ", $str);

  $str = $body['0']." ";

  for ($n=1; $n < $ile-1; $n++) {

  if( isset($body[$n]) ) $str .= $body[$n]." ";

  }

  $str .= "";

  }

  else {

  $str = $str;

  }

  return $str;

  }


  $skroc = 109;

  $ile = count ($piece);


  if(isset($_GET['page'])) $strona=$_GET['page']; else $strona=1;

  $paginator = 3 * ($strona -1);

  for ( $i = $ile-$paginator ; $i > $ile-($paginator + 3); $i--){


  if(isset($piece[$i-1])){

  preg_match_all("#{id}(.*?){/id}#s", $piece[$i-1], $id);

  $id[0][0] = str_replace('{id}','', $id[0][0]);

  $id[0][0] = str_replace('{/id}','', $id[0][0]);

  $piece[$i-1] = str_replace('{id}'.$id[0][0].'{/id}','',$piece[$i-1]);

  echo cut_comment($piece[$i-1],$skroc).'

[więcej..](?news&id='.%24id%5B0%5D%5B0%5D.')

'; } } fclose($fd); $liczstr=ceil(count($piece)/3); echo '
Strony:
'; for( $x = 1; $x <= $liczstr; $x++ ) { if($strona == $x) echo '['.$x.'](index.php?page='.%24x.')'; else echo '['.$x.'](index.php?page='.%24x.')'; } echo '

'; ?>[/code]

Tak żeby mi to działało dobrze ? bo nie moge sobie z tym poradzić :frowning: Jak ten pierwszy kod umieścić w tym drugim kodzie tak, żeby nie było błędu ?

Prosze o pomoc w tej sprawie. :frowning:


(mozilla007) #2

Tutaj cały wątek w manualu

http://php.net/manual/en/function.substr.php

<?php

echo substr('abcdef', 1); // bcdef

echo substr('abcdef', 1, 3); // bcd

echo substr('abcdef', 0, 4); // abcd

echo substr('abcdef', 0, 8); // abcdef

echo substr('abcdef', -1, 1); // f


// Accessing single characters in a string

// can also be achieved using "square brackets"

$string = 'abcdef';

echo $string[0]; // a

echo $string[3]; // d

echo $string[strlen($string)-1]; // f


?>

(Darom82) #3

mozilla007 czytalem to, ale jakoś mi to nie pomogło. Czy może ktoś mi pomóc dopasować te dwa kody żeby mi działały ?


(mozilla007) #4

Dobra daje przykład

<?

$text = "asdasjdh sakjdhsa kdhsa dhaskjd hsakdhsakjd hsakjdhsa kjdhsak djashdkjsa hdkjashd kjashdkasj hdkasjhd";

echo substr($text,0,5);

?>

Ta '5' to jest ilość znaków które zostaną wyświetlone.

I można zrobić podobnie jak wyżej. Zliczamy znaki i jeśli więcej jest to skraca, a jeśli się mieści w zakresie to zostaje tak jak jest.


(Darom82) #5

To miało raczej być coś takiego:

<?php

  error_reporting(E_ALL);

  $template = 'plik.txt';

  $message = file_get_contents($template);


  $piece=explode("$$$",$message);



    /**

  * Ucinanie tekstu po $n znakach. Gdy pozycja wcięcia wystąpi w połowie wyrazu, przesunie ją poza wyraz

  * @param {string} $str Tekst wejściowy

  * @param {int} $n Ilość znaków po której ucinamy tekst

  * @param {string} $d Tekst wstawiany za uciętym tekstem. Domyślnie wielokropek

  * @return {string} Ucięty tekst

    */

  function str_cut ($str, $n, $d='…') {

  $str = strip_tags($str);

  if (mb_strlen($str, 'utf-8') > $n) {

  preg_match('/(.{' . $n . '}.*?)\b/us', $str, $m);

  return rtrim($m[1]) . $d;

  }

  return $str;

  }


  $skroc = 530;

  $ile = count ($piece);


  if(isset($_GET['page'])) $strona=$_GET['page']; else $strona=1;

  $paginator = 3 * ($strona -1);

  for ( $i = $ile-$paginator ; $i > $ile-($paginator + 3); $i--){


  if(isset($piece[$i-1])){

  preg_match_all("#{id}(.*?){/id}#s", $piece[$i-1], $id);

  $id[0][0] = str_replace('{id}','', $id[0][0]);

  $id[0][0] = str_replace('{/id}','', $id[0][0]);

  $piece[$i-1] = str_replace('{id}'.$id[0][0].'{/id}','',$piece[$i-1]);

  echo str_cut($piece[$i - 1], $skroc, '

[więcej..](?news&id='.%24id%5B0%5D%5B0%5D.')

'); } } $liczstr=ceil(count($piece)/3); echo '
Strony:
'; for( $x = 1; $x <= $liczstr; $x++ ) { if($strona == $x) echo '['.$x.'](index.php?page='.%24x.')'; else echo '['.$x.'](index.php?page='.%24x.')'; } echo '

'; ?>[/code]

Teraz mam problem z napisami na mojej stronie www.history.is.net.pl

Chodzi mi o napisy typu ...:::history :::... dodany przez i godzina newsa, tytul newsa i podkreslenie

Zeby to wygladalo tak jak mialem tutaj zrobione www.history.is.net.pl/www.png

A teraz tak niemam, mozecie mi pomoc w tym ?


(mozilla007) #6

To tutaj trzeba zobaczyć jak się te dane układa po wczytaniu. Bo widzę że z pliku textowego są wczytywane


(Darom82) #7

To jak mam to zrobic ? w jaki sposób ?


(mozilla007) #8

A jak wygląda plik txt? Bo tego zgadywać nie będę :stuck_out_tongue:


(Darom82) #9

Właśnie taK:

History.is.net.pL

dodany 30 Października 2010r., o godz: 17:55 przez NorthAngel

Jak zapewne większość z Was już wie - w internetowej sieci wyrosła nowa historia tego co było i minęło, jak i także tego co już jest oraz w nie dalekiej przyszłości zdarzyć się ma. To dopiero wielki początek tego ekscytującego momentu zaistnienia tej strony. A to wszystko dzięki Wam, tym którzy mają tutaj swój jakiś własny wkład i pomogą nam przy realizacji tego pomysłu. Przy takim wyborze jaki dostępny jest na naszym serwisie - jestem przekonany, że każdy - nawet najbardziej wybredny z wybrednych znajdzie tu coś dla siebie. By jeszcze bardziej uatrakcyjnić wędrówkę po tej wirtualnej _ histori _ pomyślałem, że warto by umieszczać odpowiednie rzeczy, na które składają się kolejne jakby etapy rozwoju tej strony. Każdy z Czytelników może także zasugerować własne propozycje tego, co by chciał żeby właśnie tutaj według niego się znalazło. Wystarczy skorzystać z opcji komenatarzy pod tym tekstem. No to do dzieła !

{id}1{/id} $$$[/code]

I co teraz ?


(mozilla007) #10

To nie można rozdzielić tego pliku np tak:

History.is.net.pL || dodany 30 Października 2010r., o godz: 17:55 przez NorthAngel||Jak zapewne większość z Was już wie - w internetowej sieci wyrosła nowa historia tego co było i minęło, jak i także tego co już jest oraz w nie dalekiej przyszłości zdarzyć się ma.

To dopiero wielki początek tego ekscytującego momentu zaistnienia tej strony. A to wszystko dzięki Wam, tym którzy mają tutaj swój jakiś własny wkład

i później rozdzielić text na tytuł || Data dodania || treść i niech skrypt się zajmuje formatowaniem?? Bo to też może zaowocować błędami w wyświetlaniu. Choć polecałbym bazę SQL jest bardziej przejrzysta, chyba że nie ma dostępu to plik textowy pozostaje


(Darom82) #11

No ale jakbym miał to zrobić ? W jaki sposób ?


(mozilla007) #12

To akurat nic trudnego nie było :stuck_out_tongue: Już dam kod jak mi to wyszło i działa.

<?php

function explodeRows($data) {

  $rowsArr = explode("\n", $data);

  return $rowsArr;

}


function explodeTabs($singleLine) {

  $tabsArr = explode("||", $singleLine);

  return $tabsArr;

}


$filename = "news.txt";

$handle = fopen($filename, 'r');

$data = fread($handle, filesize($filename));

$rowsArr = explodeRows($data);


for($i=0;$i
  $linia = explodeTabs($rowsArr[$i]);

    echo "
".$linia[0]."";//Tutaj jest tytuł newsa

    echo "
".$linia[1]."";//Tutaj data dodania

    echo "

".substr($linia[2],0,125)."...