Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
  #1  
Old 10-26-2018, 08:19 AM
TransAmDan TransAmDan is offline
 
Join Date: Nov 2009
Posts: 34
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Accessing Database Value from a Template.

I want to access a database value from a VB template. The template is shown below. I have a new field in the 'attachment' table, called 'external_source' by default this will be zero, but if it is a 1, I want to produce different HTML code.

HTML Code:
<li>	<vb:if condition="$picture['hasthumbnail']">
	   <vb:if condition="$picture['external_source'] == 0">
	<a href="album.php?{vb:raw session.sessionurl}albumid={vb:raw albuminfo.albumid}&amp;attachmentid={vb:raw picture.attachmentid}"><img src="http://www.solent-renegades.co.uk/attachment.php?{vb:raw session.sessionurl}attachmentid={vb:raw picture.attachmentid}&amp;thumb=1" alt="{vb:raw picture.caption}" title="{vb:raw picture.caption} from {vb:raw albuminfo.title}" border="0" {vb:raw picture.dimensions}/></a>
<table width="120" height="60"><tr><td>{vb:raw picture.caption} from {vb:raw albuminfo.title}</td></tr></table>
	   <vb:else />
                  --action if we have an external source.
  	   </vb:if>

	<vb:else />
		<a class="picture" href="album.php?{vb:raw session.sessionurl}albumid={vb:raw albuminfo.albumid}&amp;attachmentid={vb:raw picture.attachmentid}"><vb:if condition="$picture['caption_preview']">{vb:raw picture.caption_preview}<vb:else />{vb:rawphrase picture}</vb:if></a>
	</vb:if>
	<vb:if condition="$show['moderation']"><span class="shade">{vb:rawphrase picture_moderated}</span></vb:if>
</li>
Looking inside album.php I have modified the call to the database to include this field too.
Code:
$pictures = $db->query_read("
		SELECT
			a.attachmentid, a.userid, a.caption, a.dateline, a.state, a.filename, a.external_source,
			fd.filesize, IF(fd.thumbnail_filesize > 0, 1, 0) AS hasthumbnail, fd.thumbnail_dateline, fd.thumbnail_width, fd.thumbnail_height
			$hook_query_fields
		FROM " . TABLE_PREFIX . "attachment AS a
		INNER JOIN " . TABLE_PREFIX . "filedata AS fd ON (fd.filedataid = a.filedataid)
		$hook_query_joins
		WHERE
			a.contentid = $albuminfo[albumid]
				AND
			a.contenttypeid = " . intval($contenttypeid) . "
			" . ((!can_moderate(0, 'canmoderatepictures') AND $albuminfo['userid'] != $vbulletin->userinfo['userid']) ? "AND a.state = 'visible'" : "") . "
			$hook_query_where
		ORDER BY a.dateline DESC
		LIMIT $start, $perpage
	");
So now $pictures contains the information from that database query.

Each individual pictures is fetched from
while ($picture = $db->fetch_array($pictures))

So in the template code I would expect pictures.external_source to contain the data from the database. Something isn't working right.

Is there some other process it goes through to pass data from album.php to the 'album_picturebit' template?
Reply With Quote
  #2  
Old 10-29-2018, 11:18 AM
x iJailBreak x's Avatar
x iJailBreak x x iJailBreak x is offline
 
Join Date: Jan 2011
Location: United Kingdom
Posts: 88
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by TransAmDan View Post
I want to access a database value from a VB template. The template is shown below. I have a new field in the 'attachment' table, called 'external_source' by default this will be zero, but if it is a 1, I want to produce different HTML code.

HTML Code:
<li>	<vb:if condition="$picture['hasthumbnail']">
	   <vb:if condition="$picture['external_source'] == 0">
	<a href="album.php?{vb:raw session.sessionurl}albumid={vb:raw albuminfo.albumid}&amp;attachmentid={vb:raw picture.attachmentid}"><img src="http://www.solent-renegades.co.uk/attachment.php?{vb:raw session.sessionurl}attachmentid={vb:raw picture.attachmentid}&amp;thumb=1" alt="{vb:raw picture.caption}" title="{vb:raw picture.caption} from {vb:raw albuminfo.title}" border="0" {vb:raw picture.dimensions}/></a>
<table width="120" height="60"><tr><td>{vb:raw picture.caption} from {vb:raw albuminfo.title}</td></tr></table>
	   <vb:else />
                  --action if we have an external source.
  	   </vb:if>

	<vb:else />
		<a class="picture" href="album.php?{vb:raw session.sessionurl}albumid={vb:raw albuminfo.albumid}&amp;attachmentid={vb:raw picture.attachmentid}"><vb:if condition="$picture['caption_preview']">{vb:raw picture.caption_preview}<vb:else />{vb:rawphrase picture}</vb:if></a>
	</vb:if>
	<vb:if condition="$show['moderation']"><span class="shade">{vb:rawphrase picture_moderated}</span></vb:if>
</li>
Looking inside album.php I have modified the call to the database to include this field too.
Code:
$pictures = $db->query_read("
		SELECT
			a.attachmentid, a.userid, a.caption, a.dateline, a.state, a.filename, a.external_source,
			fd.filesize, IF(fd.thumbnail_filesize > 0, 1, 0) AS hasthumbnail, fd.thumbnail_dateline, fd.thumbnail_width, fd.thumbnail_height
			$hook_query_fields
		FROM " . TABLE_PREFIX . "attachment AS a
		INNER JOIN " . TABLE_PREFIX . "filedata AS fd ON (fd.filedataid = a.filedataid)
		$hook_query_joins
		WHERE
			a.contentid = $albuminfo[albumid]
				AND
			a.contenttypeid = " . intval($contenttypeid) . "
			" . ((!can_moderate(0, 'canmoderatepictures') AND $albuminfo['userid'] != $vbulletin->userinfo['userid']) ? "AND a.state = 'visible'" : "") . "
			$hook_query_where
		ORDER BY a.dateline DESC
		LIMIT $start, $perpage
	");
So now $pictures contains the information from that database query.

Each individual pictures is fetched from
while ($picture = $db->fetch_array($pictures))

So in the template code I would expect pictures.external_source to contain the data from the database. Something isn't working right.

Is there some other process it goes through to pass data from album.php to the 'album_picturebit' template?
If you do var_dump($pictures), what is the output?

Also, as a rule of thumb, it's best not to modify the core files - you should be able to utilize $hook_query_fields with the nearest hook to avoid making core changes to the code. Making core changes to the vB codebase is inadvisable as it can make it more difficult to upgrade, and usually means after upgrading the same changes need to be carried out again.
Reply With Quote
  #3  
Old 10-29-2018, 12:20 PM
TransAmDan TransAmDan is offline
 
Join Date: Nov 2009
Posts: 34
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks for the response, much appreciated.

Where would i put the var_dump? in the Template? I have tried a few different formats, but either get an error or no output.

{vb:raw var_dump($pictures)}

{vb:var_dump($pictures)}
Reply With Quote
  #4  
Old 11-02-2018, 09:01 PM
x iJailBreak x's Avatar
x iJailBreak x x iJailBreak x is offline
 
Join Date: Jan 2011
Location: United Kingdom
Posts: 88
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by TransAmDan View Post
Thanks for the response, much appreciated.

Where would i put the var_dump? in the Template? I have tried a few different formats, but either get an error or no output.

{vb:raw var_dump($pictures)}

{vb:var_dump($pictures)}
Put it in album.php just after you run the query associated with $pictures.

Might also be worth putting exit after it too, so the var_dump is the only output.

PHP Code:
$pictures $db->query_read("
        SELECT
            a.attachmentid, a.userid, a.caption, a.dateline, a.state, a.filename, a.external_source,
            fd.filesize, IF(fd.thumbnail_filesize > 0, 1, 0) AS hasthumbnail, fd.thumbnail_dateline, fd.thumbnail_width, fd.thumbnail_height
            
$hook_query_fields
        FROM " 
TABLE_PREFIX "attachment AS a
        INNER JOIN " 
TABLE_PREFIX "filedata AS fd ON (fd.filedataid = a.filedataid)
        
$hook_query_joins
        WHERE
            a.contentid = 
$albuminfo[albumid]
                AND
            a.contenttypeid = " 
intval($contenttypeid) . "
            " 
. ((!can_moderate(0'canmoderatepictures') AND $albuminfo['userid'] != $vbulletin->userinfo['userid']) ? "AND a.state = 'visible'" "") . "
            
$hook_query_where
        ORDER BY a.dateline DESC
        LIMIT 
$start$perpage
    "
);

echo 
"<pre>";
var_dump($pictures);
echo 
"</pre>";
exit; 
I assume you are testing this on a different environment than live?
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 05:36 PM.


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.04338 seconds
  • Memory Usage 2,216KB
  • 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
  • (2)bbcode_code
  • (2)bbcode_html
  • (1)bbcode_php
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (4)post_thanks_box
  • (4)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (4)post_thanks_postbit_info
  • (4)postbit
  • (4)postbit_onlinestatus
  • (4)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