Wil iemand mij helpen met dit stukje PHP-code?
16 februari 2011 - 09:33   
geplaatst door: EdMac
Hoi allemaal,

Ik heb een vraagje waar ik niet helemaal uitkom. Ik weet namelijk helemaal niets van PHP, maar wil toch graag iets gedaan hebben. En het werkt al, maar tot op zekere hoogte.

Ik laat op mijn site in aanbouw een RSS-feed zien met SimplePie. Dat werkt goed, maar nu wil ik de titels na een aantal karakters afbreken om iedere titel op één regel te houden. Daar geeft de website van SimplePie wel een code voor, maar ik weet niet hoe ik die in mijn bestaande code moet plaatsen.

De nu werkende situatie ziet er zo uit:

De eerste regel op de site is:

<?php <br>include_once $_SERVER['DOCUMENT_ROOT'] . '/mapnaam/simplepie.inc'; <br>$feed = new SimplePie('http://www.telegraaf.nl/rss/index.xml');<br>?>

Op de plek waar ik de RSS-feed plaats staat deze code:

<ul id="rss">
<?php foreach ($feed->get_items(06) as $item): ?>
   <li>
       <?php echo $item->get_date('d-m-Y'); ?>


<a href="<?php print $item->get_permalink(); ?>">
       <?php print $item->get_title(); ?></a>
   </li>
<?php endforeach; ?>
</ul>

En dat levert de volgende fraaie RSS-feed op:

Nu zou ik met de volgende code in staat moeten zijn om de titels in te korten:

<?php<br>function shorten($string$length)<br>{<br>    // By default, an ellipsis will be appended to the end of the text.<br>    $suffix = '&hellip;';<br> <br>    // Convert 'smart' punctuation to 'dumb' punctuation, strip the HTML tags,<br>    // and convert all tabs and line-break characters to single spaces.<br>    $short_desc = trim(str_replace(array("\r","\n", "\t"), ' ', strip_tags($string)));<br> <br>    // Cut the string to the requested length, and strip any extraneous spaces <br>    // from the beginning and end.<br>    $desc = trim(substr($short_desc, 0, $length));<br> <br>    // Find out what the last displayed character is in the shortened string<br>    $lastchar = substr($desc, -1, 1);<br> <br>    // If the last character is a period, an exclamation point, or a question <br>    // mark, clear out the appended text.<br>    if ($lastchar == '.' || $lastchar == '!' || $lastchar == '?') $suffix='';<br> <br>    // Append the text.<br>    $desc .= $suffix;<br> <br>    // Send the new description back to the page.<br>    return $desc;<br>}<br>?>

SimplePie geeft ook nog een voorbeeld van hoe de bovenstaande code te gebruiken

<?php<br> <br>// Shorten the text to 150 characters.<br>echo shorten($item->get_description(), 150);<br> <br>?>

Kortom: waar plaats ik wat om deze situatie werkend te krijgen?

(Bewerkt door EdMac om 9:33, 16-02-2011)

"O.. ja.. erhm... da's dan wel goed."
Wil iemand mij helpen met dit stukje PHP-code?
16 februari 2011 - 09:50    reactie #1
geplaatst door: Blender
php print $item->get_title();

vervangen door:

php print shorten($item->get_title(), 150);

en ervoor zorgen dat de functie shorten ook daadwerkelijk gevonden kan worden
(aan de pagina toevoegen of include_once gebruiken als simplepie.inc in je voorbeeld).

Wil iemand mij helpen met dit stukje PHP-code?
16 februari 2011 - 10:22    reactie #2
geplaatst door: EdMac
Bedankt voor je reactie. Het wil me alleen nog niet helemaal lukken om de functie 'shorten' gevonden te laten worden.

Ik plaats nu deze code aan het begin van de pagina:

<?php <br>include_once $_SERVER['DOCUMENT_ROOT'] . '/mapnaam/simplepie.inc'; <br>$feed = new SimplePie('http://www.telegraaf.nl/rss/index.xml'); <br>?>
<?php <br>include_once function shorten($string$length) <br>{ <br>   // By default, an ellipsis will be appended to the end of the text. <br>   $suffix = '&hellip;'; <p>   // Convert 'smart' punctuation to 'dumb' punctuation, strip the HTML tags,<br>   // and convert all tabs and line-break characters to single spaces. <br>   $short_desc = trim(str_replace(array("\r","\n", "\t"), ' ', strip_tags($string))); <p>   // Cut the string to the requested length, and strip any extraneous spaces<br>   // from the beginning and end. <br>   $desc = trim(substr($short_desc, 0, $length)); <p>   // Find out what the last displayed character is in the shortened string <br>   $lastchar = substr($desc, -1, 1); <p>   // If the last character is a period, an exclamation point, or a question <br>   // mark, clear out the appended text. <br>   if ($lastchar == '.' || $lastchar == '!' || $lastchar == '?') $suffix=''; <p>   // Append the text. <br>   $desc .= $suffix; <p>   // Send the new description back to the page. <br>   return $desc; <br>} <br>?>

En roep de functie op deze manier aan:

<ul id="rss">
<?php foreach ($feed->get_items(06) as $item): ?>
   <li>
       <?php echo $item->get_date('d-m-Y'); ?>


<a href="<?php print $item->get_permalink(); ?>">
       <?php print shorten($item->get_title(), 25); ?></a>
   </li>
<?php endforeach; ?>
</ul>

Maar dat heeft deze foutmelding als resultaat:

Kan iemand mij zeggen hoe ik de functie 'shorten' op een juiste manier gevonden kan laten worden? Alvast bedankt!

"O.. ja.. erhm... da's dan wel goed."
Wil iemand mij helpen met dit stukje PHP-code?
16 februari 2011 - 10:34    reactie #3
geplaatst door: melgior
Het gaat mis in deze regel:
include_once function shorten($string, $length)

De function include_once gebruik je alleen om een ander bestand met php code in te voegen. Dus als je de functie direct in het bestand invoegt, haal je uit de bovenstaande regel include_once weg.

Wil iemand mij helpen met dit stukje PHP-code?
16 februari 2011 - 10:57    reactie #4
geplaatst door: EdMac
Vreemd. Wat ik ook probeer, hij blijft de error: Fatal error: Call to undefined function shorten() in.... geven. Op de één of andere manier lukt het me dus niet die functie in te voegen.
"O.. ja.. erhm... da's dan wel goed."
Wil iemand mij helpen met dit stukje PHP-code?
16 februari 2011 - 11:13    reactie #5
geplaatst door: melgior
Gewoon even om te checken: de eerste regel heb je veranderd van
<?php <br>include_once function shorten($string$length)
in
<?php <br>function shorten($string$length)
?
Wil iemand mij helpen met dit stukje PHP-code?
16 februari 2011 - 11:29    reactie #6
geplaatst door: EdMac
Ja, dat klopt. En daarmee blijft hij dus een error geven.
"O.. ja.. erhm... da's dan wel goed."
Wil iemand mij helpen met dit stukje PHP-code?
16 februari 2011 - 11:38    reactie #7
geplaatst door: Slagroom
Ik zou dat niet met PHP doen maar met css. Zet bijvoorbeeld eens een overflow:hidden op die div. Eventueel met een overliggende div met een fade zodat de tekst mooi wordt afgebroken.
Wil iemand mij helpen met dit stukje PHP-code?
16 februari 2011 - 12:00    reactie #8
geplaatst door: EdMac
Een oplossing met CSS gaat m.i. niet werken. Misschien ben ik onduidelijk geweest, maar ik wil dus dat de titel (de link) in de RSS-feed niet over twee regels loopt. Lange koppen moeten dus op een bepaald aantal karakters worden afgebroken, zodat iedere kop in de RSS-feed er als volgt uit ziet:

16-02-2011
Dit is een koptekst over één regel

16-02-2011
Dit is een tweede koptekst


"O.. ja.. erhm... da's dan wel goed."
Wil iemand mij helpen met dit stukje PHP-code?
16 februari 2011 - 12:49    reactie #9
geplaatst door: willemijngreven

Citaat
EdMac om 10:57, 16-02-2011
Vreemd. Wat ik ook probeer, hij blijft de error: Fatal error: Call to undefined function shorten() in.... geven. Op de één of andere manier lukt het me dus niet die functie in te voegen.

Ga er maar vanuit dat die functie niet gevonden kan worden. Het kan een typfoutje o.i.d. zijn. Haakje teveel of te weinig, noem maar op. Post anders de volledig code hier.
Wil iemand mij helpen met dit stukje PHP-code?
16 februari 2011 - 13:43    reactie #10
geplaatst door: EdMac
Er moet iets vanaf de basis niet goedzitten inderdaad, maar ik ben dan ook een nitwit op het gebied van PHP. Maargoed, ik plaats de code zoals 'ie nu staat. Ben benieuwd wat ik verkeerd doen.

Aan het begin van de pagina (als eerste code):

<?php <br>include_once $_SERVER['DOCUMENT_ROOT'] . '/mapnaam/simplepie.inc'; <br>$feed = new SimplePie('http://www.telegraaf.nl/rss/index.xml');<br>?>
<?php <br>function shorten($string$length) <br>{ <br>  // By default, an ellipsis will be appended to the end of the text. <br>  $suffix = '&hellip;'; <p>  // Convert 'smart' punctuation to 'dumb' punctuation, strip the HTML tags, <br>  // and convert all tabs and line-break characters to single spaces. <br>  $short_desc = trim(str_replace(array("\r","\n", "\t"), ' ', strip_tags($string))); <p>  // Cut the string to the requested length, and strip any extraneous spaces <br>  // from the beginning and end. <br>  $desc = trim(substr($short_desc, 0, $length)); <p>  // Find out what the last displayed character is in the shortened string <br>  $lastchar = substr($desc, -1, 1); <p>  // If the last character is a period, an exclamation point, or a question <br>  // mark, clear out the appended text. <br>  if ($lastchar == '.' || $lastchar == '!' || $lastchar == '?') $suffix=''; <p>  // Append the text. <br>  $desc .= $suffix; <p>  // Send the new description back to the page. <br>  return $desc; <br>} <br>?>

Vervolgens op de plek waar ik de feed wil plaatsen:

<ul id="rss">
<?php foreach ($feed->get_items(06) as $item): ?>
   <li>
       <?php echo $item->get_date('d-m-Y'); ?>


<a href="<?php print $item->get_permalink(); ?>">
       <?php print shorten($item->get_title(), 25); ?></a>
   </li>
<?php endforeach; ?>
</ul>

"O.. ja.. erhm... da's dan wel goed."