kikookik Posted May 7, 2013 Share Posted May 7, 2013 Hello; I have a portion of code that work outside a function, but when i include it inside a function it didn't work. I don't know why? Certainly i am missing something but i could see it. If someone saw the error so please please let me correct it. Thank you for your help. This is the source code of the file: <?php define('_JEXEC', 1); define('JPATH_BASE', realpath(dirname(__FILE__))); require_once(JPATH_BASE.'/includes/defines.php'); require_once(JPATH_BASE.'/includes/framework.php'); require_once(JPATH_BASE.'/libraries/joomla/factory.php'); $article_life = 72; // Article lifetime in hours, 72 hours = 3 days $articles_number = 15; // Alowed number of articles inside a category $db = JFactory::getDBO(); $query = $db->getQuery(true); Cleanup(49, 48, 0); function Cleanup($catid, $life = $article_life, $number = $article_number){ // Request articles in the category from database $query ->select("*") ->from("#__content") ->where("catid = " . $catid); $db ->setQuery($query); $articles = $db->loadObjectList(); $nbr = count($articles); if($nbr <= $number) return; foreach($articles as $article) { // loop through articles // $article->created looks like 2012-12-10 16:53:15 $date_created = DateTime::createFromFormat('Y-m-d H:i:s', $article->created); $timestamp_created = $date_created->format('U'); $diff_s = time() - $timestamp_created; $diff_h = $diff_s / 3600; if($diff_h > $life) { // If article life is bigger than the allowed value, remove it! $query = "DELETE from #__content where id = " . $article->id; $db ->setQuery($query); $db ->query(); } } // End foreach return; } // End Cleanup ?> Link to comment https://forums.phpfreaks.com/topic/277733-joomla-problem-when-calling-this-function/ Share on other sites More sharing options...
DavidAM Posted May 7, 2013 Share Posted May 7, 2013 You need to read up on "variable scope". The $db variable does not exist INSIDE the function since it is defined OUTSIDE the function (there may be others, I did not go through all of the code). You need to pass $db to the function in the parameter list. Link to comment https://forums.phpfreaks.com/topic/277733-joomla-problem-when-calling-this-function/#findComment-1428768 Share on other sites More sharing options...
kikookik Posted May 7, 2013 Author Share Posted May 7, 2013 Ah, sorry for that. Now i did include it but the seem issue still appear. Thank you. <?php define('_JEXEC', 1); define('JPATH_BASE', realpath(dirname(__FILE__))); require_once(JPATH_BASE.'/includes/defines.php'); require_once(JPATH_BASE.'/includes/framework.php'); require_once(JPATH_BASE.'/libraries/joomla/factory.php'); $article_life = 72; // Article lifetime in hours, 72 hours = 3 days $articles_number = 15; // Alowed number of articles inside a category Cleanup($db, 49, 48, 0); function Cleanup($catid, $life = $article_life, $number = $article_number){ $db = JFactory::getDBO(); $query = $db->getQuery(true); // Request articles in the category from database $query ->select("*") ->from("#__content") ->where("catid = " . $catid); $db ->setQuery($query); $articles = $db->loadObjectList(); $nbr = count($articles); if($nbr <= $number) return; foreach($articles as $article) { // loop through articles // $article->created looks like 2012-12-10 16:53:15 $date_created = DateTime::createFromFormat('Y-m-d H:i:s', $article->created); $timestamp_created = $date_created->format('U'); $diff_s = time() - $timestamp_created; $diff_h = $diff_s / 3600; if($diff_h > $life) { // If article life is bigger than the allowed value, remove it! $query = "DELETE from #__content where id = " . $article->id; $db ->setQuery($query); $db ->query(); } } // End foreach return; } // End Cleanup ?> Link to comment https://forums.phpfreaks.com/topic/277733-joomla-problem-when-calling-this-function/#findComment-1428773 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.