vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB4 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=252)
-   -   Accessing Database Value from a Template. (https://vborg.vbsupport.ru/showthread.php?t=326851)

TransAmDan 10-26-2018 08:19 AM

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?

x iJailBreak x 10-29-2018 11:18 AM

Quote:

Originally Posted by TransAmDan (Post 2597007)
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.

TransAmDan 10-29-2018 12:20 PM

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)}

x iJailBreak x 11-02-2018 09:01 PM

Quote:

Originally Posted by TransAmDan (Post 2597080)
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?


All times are GMT. The time now is 02:36 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01784 seconds
  • Memory Usage 1,758KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (2)bbcode_code_printable
  • (2)bbcode_html_printable
  • (1)bbcode_php_printable
  • (2)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (4)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete