Ik heb een website gemaakt met joomla versie 3.4.1)
Nu heb ik daar een rss feed reader opgezet (Simple RSS Feed Reader) maar hij gooit nu de site door elkaar en geeft een melding
Notice: Undefined property: stdClass::$feedItems in /public/sites/www.kiesuwvoordeel.nl/modules/mod_jw_srfr/helper.php on line 42

Warning: Invalid argument supplied for foreach() in /public/sites/www.kiesuwvoordeel.nl/modules/mod_jw_srfr/helper.php on line 42


Enig idee hoe ik dit kan oplossen ?
Misschien wat gebrekkige info maar hoor het graag alls jullie meer nodig hebben.
Website is www.kiesuwvoordeel.nlwww.kiesuwvoordeel.nl

Alvast bedankt voor een reactie

Henry
Wat relevante code is wel zo handig.
Dit staat er trouwens op regel 42: foreach($feed->feedItems as $key=>$item){
En waar komt $feed->feedItems vandaan?
<?php
/**
 * @version     3.3
 * @package     Simple RSS Feed Reader (module)
 * @author      JoomlaWorks - http://www.joomlaworks.net
 * @copyright   Copyright (c) 2006 - 2014 JoomlaWorks Ltd. All rights reserved.
 * @license     GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
 */

// no direct access
defined('_JEXEC') or die('Restricted access');

class SimpleRssFeedReaderHelper {

    function getFeeds($feedsArray,$totalFeedItems,$perFeedItems,$feedTimeout,$dateFormat,$wordLimit,$cacheLocation,$cacheTime,$imageHandling,$riWidth){

        /*
            Legend for '$imageHandling':
            0 - no images
            1 - fetch first image only and hide others
            2 - fetch and resize first image only and hide others
        */

        // API
        $mainframe = JFactory::getApplication();

        $cacheTime = $cacheTime*60;

        // Check if the cache folder exists
        $cacheFolderPath = JPATH_SITE.DS.$cacheLocation;
        if(file_exists($cacheFolderPath) && is_dir($cacheFolderPath)){
            // all OK
        } else {
            mkdir($cacheFolderPath);
        }

        $feeds = self::multiRequest($feedsArray,$cacheTime);
        $parsedFeeds = self::parseFeeds($feeds);
        $feedItemsArray = array();

        foreach($parsedFeeds as $feed){
            foreach($feed->feedItems as $key=>$item){
                // Create an object to store feed elements
                $feedElements[$key] = new JObject;

                $feedElements[$key]->itemTitle          = $item->title;
                $feedElements[$key]->itemLink           = $item->link;
                $feedElements[$key]->itemDate           = strftime($dateFormat,strtotime($item->pubDate));
                $feedElements[$key]->itemDateRSS        = $item->pubDate;
                $feedElements[$key]->itemDescription    = $item->description;
                $feedElements[$key]->feedImageSrc       = '';

                $feedElements[$key]->feedTitle          = self::wordLimiter($feed->feedTitle,10);
                $feedElements[$key]->feedURL            = $feed->feedSubscribeUrl;
                $feedElements[$key]->siteURL            = $feed->feedLink;

                // Give each feed an index based on date
                $itemDateIndex = strftime('%Y%m%d%H%M',strtotime($item->pubDate)).'_'.$key;

                // Pass all feed objects to an array
                $feedItemsArray[$itemDateIndex] = $feedElements[$key];
            }
        }

        // Reverse sort by key (=feed date)
        krsort($feedItemsArray);

        // Limit output
        $outputArray = array();
        $counter = 0;
        foreach($feedItemsArray as $feedItem){
            if($counter>=$totalFeedItems) continue;

            // Clean up the feed title
            $feedItem->itemTitle = trim(htmlentities($feedItem->itemTitle, ENT_QUOTES, 'utf-8'));
            
            // URL Redirect
            if(isset($feedItemLinkRedirect) && $feedItemLinkRedirect){
                $feedItem->itemLink = $siteUrl.'/modules/mod_jw_srfr/redir.php?url='.urlencode($feedItem->itemLink);
            }

            // Determine if an image reference exists in the feed description
            if($imageHandling==1 || $imageHandling==2){
                $feedImage = self::getFirstImage($feedItem->itemDescription);

                // If it does, copy, resize and store it locally
                if(isset($feedImage) && $feedImage['ext']){

                    // first remove the img tag from the description
                    $feedItem->itemDescription = str_replace($feedImage['tag'],'',trim($feedItem->itemDescription));

                    // then resize and/or assign to variable
                    if($imageHandling==2){
                        $feedItem->feedImageSrc = 'http://ir0.mobify.com/'.$riWidth.'/'.$feedImage['src'];
                    } else {
                        $feedItem->feedImageSrc = $feedImage['src'];
                    }
                } else {
                    $feedItem->feedImageSrc = '';
                }
            }

            // Strip out images from the description
            $feedItem->itemDescription = preg_replace("#<img.+?>#s","",$feedItem->itemDescription);

            // Word limit
            if($wordLimit){
                $feedItem->itemDescription = self::wordLimiter($feedItem->itemDescription,$wordLimit);
            }

            $outputArray[] = $feedItem;
            $counter++;
        }

        return $outputArray;
    }

    // Get array of feeds
    function multiRequest($data,$cacheTime) {
        // Set max_execution_time to 120
        ini_set('max_execution_time',120);

        $cacheTime = $cacheTime*60;

        $result = array();
        foreach ($data as $id => $url) {
            $feed = self::getFile($url,$cacheTime,$subFolderName='feeds');
            $result[$id] = JFile::read($feed);
        }
        return $result;
    }

    // Parse array of feeds
    function parseFeeds($feeds){
        $feedContents = array();
        foreach($feeds as $key=>$feed){
            libxml_use_internal_errors(true);
            $feedContents[$key] = new stdClass;
            $xml = simplexml_load_string($feed);
            if(is_object($xml) && $items = $xml->xpath("/rss/channel/item")) {
                $feedContents[$key]->feedSubscribeUrl = $feed;
                $feedContents[$key]->feedTitle = $xml->channel->title;
                $feedContents[$key]->feedLink = $xml->channel->link;
                $feedContents[$key]->feedPubDate = $xml->channel->pubDate;
                $feedContents[$key]->feedDescription = $xml->channel->description;
                foreach($items as $item){
                    $feedContents[$key]->feedItems[] = $item;
                }
            } elseif(is_object($xml) && $items = $xml->xpath("/*[local-name()='feed' and namespace-uri()='http://www.w3.org/2005/Atom'] /*[local-name()='entry' and namespace-uri()='http://www.w3.org/2005/Atom']")) {
                $feedContents[$key]->feedSubscribeUrl = $feed;
                $feedContents[$key]->feedTitle = (string)$xml->title;
                $feedContents[$key]->feedLink = (string)$xml->link->attributes()->href;
                $feedContents[$key]->feedPubDate = (string)$xml->updated;
                $feedContents[$key]->feedDescription = (string)$xml->subtitle;
                foreach ($items as $item) {
                    $tmp = new stdClass();
                    $tmp->title = (string)$item->title;
                    $tmp->link = (string)$item->link->attributes()->href;
                    $tmp->pubDate = (string)$item->updated;
                    $tmp->description = (!empty($item->content)) ? $item->content:$item->summary;
                    $tmp->author = (string)$item->author->name;
                    $feedContents[$key]->feedItems[] = $tmp;
                }
            }
        }
        return $feedContents;
    }

    // Word Limiter
    function wordLimiter($str,$limit=100,$end_char='[&#8230;]'){
        if (trim($str) == '') return $str;
        $str = strip_tags($str);
        preg_match('/\s*(?:\S*\s*){'. (int) $limit .'}/', $str, $matches);
        if (strlen($matches[0]) == strlen($str)) $end_char = '';
        return rtrim($matches[0]).$end_char;
    }

    // Grab the first image in a string
    function getFirstImage($string){
        // find images
        $regex = "#<img.+?>#s";
        if (preg_match_all($regex, $string, $matches, PREG_PATTERN_ORDER) > 0){
            $img = array();
            // Entire <img> tag
            $img['tag'] = $matches[0][0];
            // Image src
            if(preg_match("#src=\".+?\"#s",$img['tag'],$imgSrc)){
                $img['src'] = str_replace('src="','',$imgSrc[0]);
                $img['src'] = str_replace('"','',$img['src']);
            } else {
                $img['src'] = false;
            }
            // Is this a real content image?
            if(preg_match("#\.(jpg|jpeg|png|gif|bmp)#s",strtolower($img['src']),$imgExt)){
                $img['ext'] = true;
            } else {
                $img['ext'] = false;
            }
            return $img;
        }
    }

    // Get remote file
    function getFile($url, $cacheTime=3600, $subFolderName='', $extensionName='mod_jw_srfr'){

        jimport('joomla.filesystem.file');

        // Check cache folder
        if($subFolderName){
            $cacheFolderPath = JPATH_SITE.DS.'cache'.DS.$extensionName.DS.$subFolderName;
        } else {
            $cacheFolderPath = JPATH_SITE.DS.'cache'.DS.$extensionName;
        }

        if(file_exists($cacheFolderPath) && is_dir($cacheFolderPath)){
            // all OK
        } else {
            mkdir($cacheFolderPath);
        }

        $url = trim($url);

        if(substr($url,0,4)=="http"){
            $turl = explode("?", $url);
            $matchComponents = array("#(http|https)\:\/\/#s","#www\.#s");
            $replaceComponents = array("","");
            $turl = preg_replace($matchComponents,$replaceComponents,$turl[0]);
            $turl = str_replace(array("/","-","."),array("_","_","_"),$turl);
            $tmpFile = $cacheFolderPath.DS.urlencode($turl).'_'.md5($url).'.cache';
        } else {
            $tmpFile = $cacheFolderPath.DS.'cached_'.md5($url);
        }

        // Check if a cached copy exists otherwise create it
        if(file_exists($tmpFile) && is_readable($tmpFile) && (filemtime($tmpFile)+$cacheTime) > time()){

            $result = $tmpFile;

        } else {
            // Get file
            if(substr($url,0,4)=="http"){
                // remote file
                if(ini_get('allow_url_fopen')){
                    // file_get_contents
                    $fgcOutput = JFile::read($url);

                    // cleanup the content received
                    $fgcOutput = preg_replace("#(\n|\r|\s\s+|<!--(.*?)-->)#s", "", $fgcOutput);
                    $fgcOutput = preg_replace("#(\t)#s", " ", $fgcOutput);

                    JFile::write($tmpFile,$fgcOutput);
                } elseif(in_array('curl',get_loaded_extensions())) {
                    // cURL
                    $ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, $url);
                    curl_setopt($ch, CURLOPT_HEADER, false);
                    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    $chOutput = curl_exec($ch);
                    curl_close($ch);
                    JFile::write($tmpFile,$chOutput);
                } else {
                    // fsockopen
                    $readURL = parse_url($url);
                    $relativePath = (isset($readURL['query'])) ? $readURL['path']."?".$readURL['query'] : $readURL['path'];
                    $fp = fsockopen($readURL['host'], 80, $errno, $errstr, 5);
                    if (!$fp) {
                        JFile::write($tmpFile,'');
                    } else {
                        $out = "GET ".$relativePath." HTTP/1.1\r\n";
                        $out .= "Host: ".$readURL['host']."\r\n";
                        $out .= "Connection: Close\r\n\r\n";
                        fwrite($fp, $out);
                        $header = '';
                        $body = '';
                        do { $header .= fgets($fp,128); } while (strpos($header,"\r\n\r\n")=== false); // get the header data
                        while (!feof($fp)) $body .= fgets($fp,128); // get the actual content
                        fclose($fp);
                        JFile::write($tmpFile,$body);
                    }
                }

                $result = $tmpFile;

            } else {

                // local file
                $result = $url;

            }

        }

        return $result;
    }

} // END CLASS
?>



[size=xsmall]Toevoeging op 14/06/2015 12:48:27:[/size]

Excuses, zal ik de volgende keer aandenken.

Reageren