Tycoon Talk
Become a Big fish!
The number 1 forum for online business!
Post topics, ask questions, share your knowledge.
Tycoon Talk is part of Freelancer.com - find skilled workers online at a fraction of the cost.

PHP Forum


You are currently viewing our PHP Forum as a guest. Please register to participate.
Login



Freelance Jobs

Reply
Calling data from a mysql database and populating a row of articles using functions
Old 07-13-2010, 08:28 AM Calling data from a mysql database and populating a row of articles using functions
Junior Talker

Posts: 2
Trades: 0
I'm an amateur at this but I'll try my best to explain it.

How to explain this. I'm working with vbulletin 4 software right now and I'm trying to make a "scrolling features" section. The idea is to be able to place articles in a "featured content" category and have them dynamically appear at the top of the page in a formatted fashion. I successfully accomplished this by pulling the information directly out of the mysql table. Then it was decided to have a single Top Story section there as well. I also wanted to accomplish this by using a category name to dynamically place it at the top of the site, alongside the "scrolling features" section.

The problem I'm running into is doing both at once within the same script. I thought the best way to do it was to use functions since using two if statements resulted in failure. I tried all kinds of conditionals and looping statements, and now I'm stuck. I can't get it to display at all unless I'm only trying to do one section or the other, and trying to do it using functions only ends up spitting out one story in the "scrolling features" section. What can I do to get this on the right track?

I'm restricted in that the script has to end in the form of [ICODE]"$output = "[/ICODE]. Any help at all would be greatly appreciated.

PHP Code:
ob_start();

//The three functions below belong in a separate file
function truncate($text$length$suffix '…'$isHTML true){
        
$i 0;
        
$simpleTags=array('br'=>true,'hr'=>true,'input'=>true,'image'=>true,'link'=>true,'meta'=>true);
        
$tags = array();
        if(
$isHTML){
            
preg_match_all('/<[^>]+>([^<]*)/'$text$mPREG_OFFSET_CAPTURE PREG_SET_ORDER);
            foreach(
$m as $o){
                if(
$o[0][1] - $i >= $length)
                    break;
                
$t substr(strtok($o[0][0], " \t\n\r\0\x0B>"), 1);
                
// test if the tag is unpaired, then we mustn't save them
                
if($t[0] != '/' && (!isset($simpleTags[$t])))
                    
$tags[] = $t;
                elseif(
end($tags) == substr($t1))
                    
array_pop($tags);
                
$i += $o[1][1] - $o[0][1];
            }
        }
        
        
// output without closing tags
        
$output substr($text0$length min(strlen($text),  $length $i));
        
// closing tags
        
$output2 = (count($tags array_reverse($tags)) ? '</' implode('></'$tags) . '>' '');
        
        
// Find last space or HTML tag (solving problem with last space in HTML tag eg. <span class="new">)
        
$pos = (int)end(end(preg_split('/<.*>| /'$output, -1PREG_SPLIT_OFFSET_CAPTURE)));
        
// Append closing tags to output
        
$output.=$output2;

        
// Get everything until last space
        
$one substr($output0$pos);
        
// Get the rest
        
$two substr($output$pos, (strlen($output) - $pos));
        
// Extract all tags from the last bit
        
preg_match_all('/<(.*?)>/s'$two$tags);
        
// Add suffix if needed
        
if (strlen($text) > $length) { $one .= $suffix; }
        
// Re-attach tags
        
$output $one implode($tags[0]);
        
        return 
$output;
    }
//This is the first problem function. This does not spit out the info I need it to    
function contentstring($category$previewtxt$popular) {
     if(
$category == 41) {
        
$content_bits .= "\t\t<li>\n\t\t<div class=\"preview_image\"><img src=\"".$popular[previewimage]."\" /></div>\n\t\t<h3><a href=\"/content/".$popular[nodeid]."\">".$popular[title]."</a></h3>\n\t\t<p>".$previewtxt."</p>\n\t\t</li>\n</ul>";
                                         }
return 
$content_bits;
}

//This is the second problem function. This does not spit out the info I need it to    
function newsstring($category$previewtxt$popular) {
     if(
$category == 42) {
        
$news_bits .= "<div class="news"><div class=\"news_preview_img\"><img src=\"".$popular[previewimage]."\" /></div><h3><a href=\"/content/".$popular[nodeid]."\">".$popular[title]."</a></h3>\n\t\t<p>".$previewtxt."</p>\n\t\t</div>\n<ul id=\"ffxivblog\" class=\"jcarousel-skin-ffxivblog\">\n";
                                         }
return 
$news_bits;
}

  
// Featured Content
  
$popular_get vB::$db->query_read("
    SELECT "
.TABLE_PREFIX."cms_node.nodeid,
     "
.TABLE_PREFIX."cms_node.contentid,
     "
.TABLE_PREFIX."cms_article.pagetext,
     "
.TABLE_PREFIX."cms_article.previewimage,
     "
.TABLE_PREFIX."cms_nodecategory.categoryid,
     "
.TABLE_PREFIX."cms_nodeinfo.title
    FROM "
.TABLE_PREFIX."cms_node
    LEFT JOIN "
.TABLE_PREFIX."cms_article
    ON "
.TABLE_PREFIX."cms_node.contentid = ".TABLE_PREFIX."cms_article.contentid
    LEFT JOIN "
.TABLE_PREFIX."cms_nodecategory
    ON "
.TABLE_PREFIX."cms_node.nodeid = ".TABLE_PREFIX."cms_nodecategory.nodeid
    LEFT JOIN "
.TABLE_PREFIX."cms_nodeinfo
    ON "
.TABLE_PREFIX."cms_node.nodeid = ".TABLE_PREFIX."cms_nodeinfo.nodeid
    WHERE "
.TABLE_PREFIX."cms_nodecategory.categoryid BETWEEN 41 AND 42");
  
$content_bits '';
  
$news_bits '';
  while(
$popular vB::$db->fetch_array($popular_get)) {
        
$item $popular[pagetext];
        
$item preg_replace('[\[.{2,}/.{1,}\]]'''$item);
        
$item preg_replace('[<object.{2,}/object>]'''$item);
$previewtxt =  truncate($item80$suffix '…'$isHTML true);
$category $popular[categoryid];
$content_bits contentstring($category$previewtxt$popular);
$news_bits contentstring($category$previewtxt$popular);
  }
  
$output =  $content_bits $news_bits;
  
ob_end_clean(); 
senshikarasu is offline
Reply With Quote
View Public Profile
 
 
Register now for full access!
Old 07-13-2010, 06:25 PM Re: Calling data from a mysql database and populating a row of articles using functio
chrishirst's Avatar
Missing! presumed drunk.

Posts: 42,385
Name: Chris Hirst
Location: Blackpool. UK
Trades: 0
PHP only runs when the page is requested, once the HTML source code has been sent to the browser, the PHP script has run and is finished with until the page is requested again.
__________________
Chris. ->>
Please login or register to view this content. Registration is FREE
<<-

A foolish consistency is the hobgoblin of little minds
Thought for today:- Is SEO the only industry where all the cowboys are Indians?
chrishirst is offline
Reply With Quote
View Public Profile Visit chrishirst's homepage!
 
Old 07-13-2010, 09:29 PM Re: Calling data from a mysql database and populating a row of articles using functio
Junior Talker

Posts: 2
Trades: 0
I was able to solve this with some help from someone else. Here's the code if anyone is interested.

Functions
PHP Code:
function truncate($text$length$suffix '&hellip;'$isHTML true){
        
$i 0;
        
$simpleTags=array('br'=>true,'hr'=>true,'input'=>true,'image'=>true,'link'=>true,'meta'=>true);
        
$tags = array();
        if(
$isHTML){
            
preg_match_all('/<[^>]+>([^<]*)/'$text$mPREG_OFFSET_CAPTURE PREG_SET_ORDER);
            foreach(
$m as $o){
                if(
$o[0][1] - $i >= $length)
                    break;
                
$t substr(strtok($o[0][0], " \t\n\r\0\x0B>"), 1);
                
// test if the tag is unpaired, then we mustn't save them
                
if($t[0] != '/' && (!isset($simpleTags[$t])))
                    
$tags[] = $t;
                elseif(
end($tags) == substr($t1))
                    
array_pop($tags);
                
$i += $o[1][1] - $o[0][1];
            }
        }
        
        
// output without closing tags
        
$output substr($text0$length min(strlen($text),  $length $i));
        
// closing tags
        
$output2 = (count($tags array_reverse($tags)) ? '</' implode('></'$tags) . '>' '');
        
        
// Find last space or HTML tag (solving problem with last space in HTML tag eg. <span class="new">)
        
$pos = (int)end(end(preg_split('/<.*>| /'$output, -1PREG_SPLIT_OFFSET_CAPTURE)));
        
// Append closing tags to output
        
$output.=$output2;

        
// Get everything until last space
        
$one substr($output0$pos);
        
// Get the rest
        
$two substr($output$pos, (strlen($output) - $pos));
        
// Extract all tags from the last bit
        
preg_match_all('/<(.*?)>/s'$two$tags);
        
// Add suffix if needed
        
if (strlen($text) > $length) { $one .= $suffix; }
        
// Re-attach tags
        
$output $one implode($tags[0]);
        
        return 
$output;
    }
    
function 
outputstring($category$previewtxt, array $popular)
{
    
$sResult '';
    switch(
$category)
    {
        case 
41:
            
$sResult "\t\t<li>\n\t\t<div class=\"preview_image\"><img src=\"".$popular['previewimage']."\" /></div>\n\t\t<h3><a href=\"/content/".$popular['nodeid']."\">".$popular['title']."</a></h3>\n\t\t<p>".$previewtxt."</p>\n\t\t</li>\n";
            break;
        case 
42:
            
$sResult "<div class=\"news\"><div class=\"news_preview_img\"><img src=\"".$popular['previewimage']."\" /></div><h3><a href=\"/content/".$popular['nodeid']."\">".$popular['title']."</a></h3>\n\t\t<p>".$previewtxt."</p>\n\t\t</div>\n<ul id=\"ffxivblog\" class=\"jcarousel-skin-ffxivblog\">\n";
            break;
    }
    return 
$sResult;

Main Code
PHP Code:
ob_start();
include(
'./scripts/custom-functions.php');
$popular_get vB::$db->query_read("
    SELECT "
.TABLE_PREFIX."cms_node.nodeid,
     "
.TABLE_PREFIX."cms_node.contentid,
     "
.TABLE_PREFIX."cms_article.pagetext,
     "
.TABLE_PREFIX."cms_article.previewimage,
     "
.TABLE_PREFIX."cms_nodecategory.categoryid,
     "
.TABLE_PREFIX."cms_nodeinfo.title
    FROM "
.TABLE_PREFIX."cms_node
    LEFT JOIN "
.TABLE_PREFIX."cms_article
    ON "
.TABLE_PREFIX."cms_node.contentid = ".TABLE_PREFIX."cms_article.contentid
    LEFT JOIN "
.TABLE_PREFIX."cms_nodecategory
    ON "
.TABLE_PREFIX."cms_node.nodeid = ".TABLE_PREFIX."cms_nodecategory.nodeid
    LEFT JOIN "
.TABLE_PREFIX."cms_nodeinfo
    ON "
.TABLE_PREFIX."cms_node.nodeid = ".TABLE_PREFIX."cms_nodeinfo.nodeid
    WHERE "
.TABLE_PREFIX."cms_nodecategory.categoryid BETWEEN 41 AND 42");
  
$content_bits '';
  
$news_bits '';

  while(
$popular vB::$db->fetch_array($popular_get)) {
$category $popular['categoryid'];
$item $popular['pagetext'];
$item preg_replace('[\[.{2,}/.{1,}\]]'''$item);
$item preg_replace('[<object.{2,}/object>]'''$item);
$previewtxt =  truncate($item80$suffix '…'$isHTML true);

// These will need to be concatenated
    
if ($category == 42)
    {
        
$news_bits .= outputstring($category$previewtxt$popular);
    }
    else
    {
        
$content_bits .= outputstring($category$previewtxt$popular);
    }
  }  
  
$output =  $news_bits.$content_bits."</ul>";
  
ob_end_clean(); 
senshikarasu is offline
Reply With Quote
View Public Profile
 
Reply     « Reply to Calling data from a mysql database and populating a row of articles using functions
 

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off





   
RSS Feed  Feeds: RSS   JS   XML
RSS Feed  Feeds for this forum: RSS   JS   XML



Page generated in 0.26348 seconds with 12 queries