Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
  #1  
Old 05-05-2010, 04:28 AM
redhawk89 redhawk89 is offline
 
Join Date: Dec 2008
Posts: 139
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default PHP loading at the top of the page when using direct execution?

I can't figure out what in this code is making it break its widget and load at the very top of the page.

It's supposed to take the XKCD info and toss it in a widget, but it breaks out.

Here is the code. It's a carbon copy of what gets displayed at http://www.saskforum.ca/xkcd/newest.php

HTML Code:
<?php
function getNewestXKCD() {
   $document = new DOMDocument();
   // Load the HTML document from xkcd.com. The '@' is to suppress error messages (since there is one!).
   $load = @$document->loadHTMLFile('http://www.xkcd.com/');
   
   $src = '';
   $title = '';
   $alt = '';
   
   // If we can connect to the site:
   if ($load) {
      // Make an array of all of the image tags in the page.
      $images = $document->getElementsByTagName('img');
   
      // Go through each image tag to until we find the comic.
      foreach ($images as $image) {
         // If it's the one with the comic:
         if (substr($image->getAttribute('src'), 0, 28) == 'http://imgs.xkcd.com/comics/') {
            $src = $image->getAttribute('src');
            $title = $image->getAttribute('title');
            $alt = $image->getAttribute('alt');
            break; // We don't need to look anymore.
         }
      }
   
      // Create output (no need to use the DOM for this part):
      $return = '<div id="newKXCD" style="text-align:center;"><h1 style="font-size:20px;font-variant:small-caps;font-

family:Lucida, sans-serif;font-weight:bold;">'.$alt.'</h1>';
      $return .= '<a href="http://www.xkcd.com" style="size:14pt;color:black;text-decoration:none;"><img src="'.$src.'" 

title="'.$title.'" alt="'.$alt.'" border="0" /></a></div>';
   }
   // If we cannot connect to the site, print an error message.
   else $return = '<div id="newKXCD" style="text-align:center"><a href="http://www.xkcd.com">Newest XKCD Comic cannot be 

accessed<br>at this time, please try again later!</a></div>';
   return $return;

} // End function

// Call the function which returns the HTML to display the image
echo getNewestXKCD();

// Oh and: Unexpected end tag : a in http://www.xkcd.com/, line: 48
?>
I left it as is so you can check it out.

What will it take to make this load within the widget box?

--------------- Added [DATE]1273101133[/DATE] at [TIME]1273101133[/TIME] ---------------

bump
Reply With Quote
  #2  
Old 05-06-2010, 11:08 PM
redhawk89 redhawk89 is offline
 
Join Date: Dec 2008
Posts: 139
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

nobody?
Reply With Quote
  #3  
Old 05-11-2010, 12:33 AM
redhawk89 redhawk89 is offline
 
Join Date: Dec 2008
Posts: 139
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

bump, will pay $10 via paypal for anyone who can help lead me to a fix here.
Reply With Quote
  #4  
Old 05-11-2010, 01:11 AM
Jaxel Jaxel is offline
 
Join Date: Sep 2005
Posts: 1,160
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

ECHO always gets called IMMEDIATELY.

vBulletin is built within variables which are called at the end. Because you are using echo, your widget is being printed first. What you should do instead is call the function through a variable, and then call the variable in the appropriate spot on your page.
Reply With Quote
  #5  
Old 05-11-2010, 05:17 AM
ragtek ragtek is offline
 
Join Date: Mar 2006
Location: austria, croatia
Posts: 1,630
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

1. create a new php direct execution widget
2. add this code:
PHP Code:
<?php
ob_start
();
function 
getNewestXKCD() {
   
$document = new DOMDocument();
   
// Load the HTML document from xkcd.com. The '@' is to suppress error messages (since there is one!).
   
$load = @$document->loadHTMLFile('http://www.xkcd.com/');
   
   
$src '';
   
$title '';
   
$alt '';
   
   
// If we can connect to the site:
   
if ($load) {
      
// Make an array of all of the image tags in the page.
      
$images $document->getElementsByTagName('img');
   
      
// Go through each image tag to until we find the comic.
      
foreach ($images as $image) {
         
// If it's the one with the comic:
         
if (substr($image->getAttribute('src'), 028) == 'http://imgs.xkcd.com/comics/') {
            
$src $image->getAttribute('src');
            
$title $image->getAttribute('title');
            
$alt $image->getAttribute('alt');
            break; 
// We don't need to look anymore.
         
}
      }
   
      
// Create output (no need to use the DOM for this part):
      
$return '<div id="newKXCD" style="text-align:center;"><h1 style="font-size:20px;font-variant:small-caps;font-

family:Lucida, sans-serif;font-weight:bold;">'
.$alt.'</h1>';
      
$return .= '<a href="http://www.xkcd.com" style="size:14pt;color:black;text-decoration:none;"><img src="'.$src.'" 

title="'
.$title.'" alt="'.$alt.'" border="0" /></a></div>';
   }
   
// If we cannot connect to the site, print an error message.
   
else $return '<div id="newKXCD" style="text-align:center"><a href="http://www.xkcd.com">Newest XKCD Comic cannot be 

accessed<br>at this time, please try again later!</a></div>'
;
   return 
$return;

// End function

// Call the function which returns the HTML to display the image
$output getNewestXKCD();

// Oh and: Unexpected end tag : a in http://www.xkcd.com/, line: 48
?>
I changed only echo getNewestXKCD(); to $output = getNewestXKCD(); because $output is the standard outputvariable in the widgets
Reply With Quote
  #6  
Old 05-12-2010, 01:09 AM
redhawk89 redhawk89 is offline
 
Join Date: Dec 2008
Posts: 139
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks! PM me where you'd like the donation sent!
Reply With Quote
Reply

Thread Tools
Display Modes

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

Forum Jump


All times are GMT. The time now is 08:54 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.03829 seconds
  • Memory Usage 2,218KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)bbcode_html
  • (1)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (6)post_thanks_box
  • (6)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (6)post_thanks_postbit_info
  • (6)postbit
  • (6)postbit_onlinestatus
  • (6)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete