PDA

View Full Version : need help on building output in template


ageurtse
12-29-2009, 06:32 AM
hello,

i'm bussy on writing a plugin. but after a while i have the idea that what i'm doing is not right.
i do the output to the webpage with echo "...." but i think i have to parse the output somehow to the template.

but how do i do that.

i use a table to display the user attachments. but i realy would do this in the template.

i used this link to add a extra members tabhttps://vborg.vbsupport.ru/showthread.php?t=165554&highlight=profile*
This is done good, the template it self is not altert, the plugin so far i have now is below.

how do i output everything to the template. a specialy the table.
there should be a better way than i did.

please need help and or suggestions.

as i have solved this, there should be :
above the table a page navigation
in admincp-> options a settingsfield where maxcol,maxrow, .... can be alterd.
there should be an ability to alter te language of the outputed data.

but hese are all next steps in my project.

i have searched the inet but i'm getting stucked here.

i think the messed up left colum would be oke if i put the stuff in the template.

$maxcolum = 4;
$maxrow = 4;
$maxwidth = 200;
$maxheight = 200;
$page = $vbulletin->input->clean_gpc('r', 'page', TYPE_INT);


$blocklist = array_merge($blocklist, array(
'mymodification' => array(
'class' => 'MyModification',
'title' => 'Bijlagen',
'hook_location' => 'profile_left_last'
)
));

class vB_ProfileBlock_MyModification extends vB_ProfileBlock
{

var $template_name = 'memberinfo_block_mymodification';

function confirm_empty_wrap()
{
return false;
}

function confirm_display()
{
return ($this->block_data['mymodification'] != '');
}

function prepare_output($id = '', $options = array())
{
global $maxcolum, $maxrow, $maxwidth, $maxheight, $vbulletin, $page;

$colum = 0;
$forumids= null;

$perpage = $maxcolum * $maxrow;

foreach ($vbulletin->userinfo['forumpermissions'] AS $vbulletin->foruminfo[forumid] => $perm)
{
if (($perm & $vbulletin->bf_ugp_forumpermissions['canview']))
{
$forumids .= ','.$vbulletin->foruminfo[forumid];
}
}

$attachments = $vbulletin->db->query_read("
SELECT attachment.attachmentid, attachment.contentid, attachment.userid, post.postid, post.threadid, post.visible,thread.forumid,
thread.title, thread.open
FROM vb3_attachment as attachment
LEFT JOIN vb3_post AS post ON (post.postid = attachment.contentid)
LEFT JOIN vb3_thread as thread on(post.threadid = thread.threadid)
LEFT JOIN vb3_deletionlog AS deletionlog ON(attachment.contentid = deletionlog.primaryid AND type = 'post')
WHERE attachment.userid = ".$this->profile->userinfo['userid']. "
AND (
thread.forumid IN(0$forumids)
AND thread.visible = 1
AND post.visible = 1
AND deletionlog.primaryid IS NULL)");
$totalattachments = $vbulletin->db->num_rows($attachments);


$totalpages = ceil($totalattachments / ($perpage));
$perpage = $maxcolum * $maxrow;

$vbulletin->input->clean_array_gpc('r', array(
'perpage' => TYPE_UINT,
'pagenumber' => TYPE_UINT,
));



$attachments = $vbulletin->db->query_read("
SELECT attachment.attachmentid, attachment.contentid, attachment.userid, post.postid, post.threadid, post.visible,thread.forumid,
thread.title, thread.open
FROM vb3_attachment as attachment
LEFT JOIN vb3_post AS post ON (post.postid = attachment.contentid)
LEFT JOIN vb3_thread as thread on(post.threadid = thread.threadid)
LEFT JOIN vb3_deletionlog AS deletionlog ON(attachment.contentid = deletionlog.primaryid AND type = 'post')
WHERE attachment.userid = ".$this->profile->userinfo['userid']. "
AND (
thread.forumid IN(0$forumids)
AND thread.visible = 1
AND post.visible = 1
AND deletionlog.primaryid IS NULL) limit ".($page*$perpage). ",". (($page+1)*$perpage));




$output = "";
$output .= "<br>Totaal aantal bijlagen ".$totalattachments. "<br>Huidige pagina : ". $curentpage. " van ". $totalpages. "
URL page : ".$page."<br>
<table border=1>";


while ($post = mysql_fetch_array($attachments))
{
if ($colum == 0) {$output .= "<TR>";}

$output .= "<td width=".$maxwidth." height=".$maxheight."><a target=blank href=attachment.php?attachmentid=".$post['attachmentid']."/>
<img border=0 src=attachment.php?attachmentid=".$post['attachmentid']."&thumb=1 width=100% height=100%/>
</a></td>" ;

$colum = $colum + 1;

if ($colum == $maxcolum){
$colum = 0;
echo "</tr>";
}
}
$output .= "</table>";
$this->block_data['mymodification'] = $output;
}
}

and a screenshot of the outputed data.

Lynne
12-29-2009, 02:47 PM
I don't see what the stuff you've circled in red in your image has to do with your code. The code you wrote just adds a tab to your profile, which is seen on the right in your image. I don't see any code that outputs anything where you circled stuff in red.

ageurtse
12-29-2009, 04:05 PM
no that happend when i run my code.

that is a side affect. it is somthing i work on later.

it's more like should i rewrite te template so that it gets it's data from the plugin.
or do i create the output in the plugin itself.

if i have to rewrite the template where do i start, i couldn't find resources that helpt me with this problem. so please help me.

ps. forget the red circel, this is a side effect from my plugin.

Lynne
12-29-2009, 05:53 PM
You can either output the html directly from the plugin or use templates. It really doesn't matter which way you do it. I have a couple of added tabs on my site and I use templates in one of them and just output html in the other. So, it's personal preference.

ageurtse
12-30-2009, 01:56 PM
so what i do is pretty normal.

can i use sanitize_pageresults in a plugin so that it render a peace of code to insert in my page?

i had to try this befor using this link but there where some errors.

how do i use sanitize in a plugin?

Lynne
12-31-2009, 05:10 PM
Did you create a template memberinfo_block_mymodification? What does it look like? (Did you make it similar to the other memberinfo_block_* ?)

ageurtse
12-31-2009, 05:50 PM
Of you follow the first post that is what i put in my template. It looks like it feta à wrong class in it's div. I don't how to alter this. It looks like it's somewhere hardcoded

Lynne
12-31-2009, 05:58 PM
The old template will not work for vb4.

ageurtse
12-31-2009, 07:02 PM
oke but how do i fix it ?

do i need to register the outpu and put it that way in my template ?

Lynne
12-31-2009, 07:50 PM
The only data that gets spit out in the template is the block_data ({vb:raw block_data.mymodification})which you are defining in the plugin, so you don't need to register any variables.

ageurtse
12-31-2009, 08:20 PM
But why is it all meshd up? And on the first load the plugin is displayed below the About plugin.

Lynne
12-31-2009, 11:08 PM
Probably because your template is not using the correct css classes. If you look at your page source, the stuff that is 'showing' is class=selected_view_section, if it isn't showing (the tab isn't selected), it is class=view_section. You need to write a condition at the top of your template to define which class is used in your div (<vb:if condition="$selected_tab == 'mymodification'"> class="selected_view_section"<vb:else />class="view_section"</vb:if>)

ageurtse
01-01-2010, 05:20 AM
that's correct, mymodification has the class Block, all the other have view_section and one has selected_view_section.

that isn't going to work, i had to try that before.

look below for what is outputed:

i have trying a lot but i can't get i to work.





<div id="view-aboutme" class="selected_view_section">
<h3 class="subsectionhead">
</h3>
<h4 id="about-me" class="subsectionhead-understate">Basic Information</h4>
<div class="subsection">
</div>
<h4 class="subsectionhead-understate">Handtekening</h4>
<div class="subsection">\n Computers make very fas... very accurate mistakes.\n</div>
<h4 id="contact-info" class="subsectionhead-understate">Contact</h4>
<div class="subsection">
</div>
<h4 id="view-statistics" class="subsectionhead-understate">Statistieken</h4>
<div class="subsection">
</div>
</div>
<div id="view-friends-content" class="view_section">
<h3 id="friends" class="subsectionhead">
</h3>
<div>
</div>
</div>
<div id="view-infractions-content" class="view_section">\n \n </div>
<div id="view-mymodification" class="block">
<div class="view_section">\n\n$block_data[mymodification]\n\n</div>
</div>
<div class="underblock"/>

Lynne
01-01-2010, 02:33 PM
I don't understand what you are printing out there - that shouldn't be your template, so what is it?

ageurtse
01-01-2010, 03:58 PM
that is the code what my members page give after rendering, and after inserting the code you gave in post 12.

at the bottom of the code you coulld see what it gave as output. and that is not what my plugin should give.


i put the code just before the hook location at the bottom of the members template.

[edit] code added

plugin code, hook location: members_hook_location_start
$maxcolum = 4;
$maxrow = 4;
$maxwidth = 200;
$maxheight = 200;
$page = $vbulletin->input->clean_gpc('r', 'page', TYPE_INT);


$blocklist = array_merge($blocklist, array(
'mymodification' => array(
'class' => 'mymodification',
'title' => 'Bijlagen',
'hook_location' => 'profile_left_last'
)
));

class vB_ProfileBlock_MyModification extends vB_ProfileBlock
{

var $template_name = 'memberinfo_block_mymodification';

function confirm_empty_wrap()
{
return true;
}

function confirm_display()
{
return ($this->block_data['mymodification'] != '');
}

function prepare_output($id = '', $options = array())
{
global $maxcolum, $maxrow, $maxwidth, $maxheight, $vbulletin, $page;

$colum = 0;
$forumids= null;

$perpage = $maxcolum * $maxrow;

foreach ($vbulletin->userinfo['forumpermissions'] AS $vbulletin->foruminfo[forumid] => $perm)
{
if (($perm & $vbulletin->bf_ugp_forumpermissions['canview']))
{
$forumids .= ','.$vbulletin->foruminfo[forumid];
}
}

$attachments = $vbulletin->db->query_read("
SELECT attachment.attachmentid, attachment.contentid, attachment.userid, post.postid, post.threadid, post.visible,thread.forumid,
thread.title, thread.open
FROM vb3_attachment as attachment
LEFT JOIN vb3_post AS post ON (post.postid = attachment.contentid)
LEFT JOIN vb3_thread as thread on(post.threadid = thread.threadid)
LEFT JOIN vb3_deletionlog AS deletionlog ON(attachment.contentid = deletionlog.primaryid AND type = 'post')
WHERE attachment.userid = ".$this->profile->userinfo['userid']. "
AND (
thread.forumid IN(0$forumids)
AND thread.visible = 1
AND post.visible = 1
AND deletionlog.primaryid IS NULL)");
$totalattachments = $vbulletin->db->num_rows($attachments);


$totalpages = ceil($totalattachments / ($perpage));
$perpage = $maxcolum * $maxrow;

$vbulletin->input->clean_array_gpc('r', array(
'perpage' => TYPE_UINT,
'pagenumber' => TYPE_UINT,
));



$attachments = $vbulletin->db->query_read("
SELECT attachment.attachmentid, attachment.contentid, attachment.userid, post.postid, post.threadid, post.visible,thread.forumid,
thread.title, thread.open
FROM vb3_attachment as attachment
LEFT JOIN vb3_post AS post ON (post.postid = attachment.contentid)
LEFT JOIN vb3_thread as thread on(post.threadid = thread.threadid)
LEFT JOIN vb3_deletionlog AS deletionlog ON(attachment.contentid = deletionlog.primaryid AND type = 'post')
WHERE attachment.userid = ".$this->profile->userinfo['userid']. "
AND (
thread.forumid IN(0$forumids)
AND thread.visible = 1
AND post.visible = 1
AND deletionlog.primaryid IS NULL) limit ".($page*$perpage). ",". (($page+1)*$perpage));




$output = "";
$output .= "<br>Totaal aantal bijlagen ".$totalattachments. "<br>Huidige pagina : ". $curentpage. " van ". $totalpages. "
URL page : ".$page."<br>
<table border=1>";


while ($post = mysql_fetch_array($attachments))
{
if ($colum == 0) {$output .= "<TR>";}

$output .= "<td width=".$maxwidth." height=".$maxheight."><a target=blank href=attachment.php?attachmentid=".$post['attachmentid']."/>
<img border=0 src=attachment.php?attachmentid=".$post['attachmentid']."&thumb=1 width=100% height=100%/>
</a></td>" ;

$colum = $colum + 1;

if ($colum == $maxcolum){
$colum = 0;
echo "</tr>";
}
}
$output .= "</table>";
$this->block_data['mymodification'] = $output;
}
}



Template : memberinfo_block_mymodification

<vb:if condition="$selected_tab == 'mymodification'"> class="selected_view_section"<vb:else />class="view_section"</vb:if>
$block_data[mymodification]

Template : last peace of MEMBERINFO

<div id="view-aboutme" class="<vb:if condition="$selected_tab == 'aboutme'">selected_view_section<vb:elseif condition="$selected_tab == '' AND !$show['post_visitor_message']" />selected_view_section<vb:else />view_section</vb:if>">
{vb:raw blocks.aboutme}
</div>
<div id="view-friends-content" class="<vb:if condition="$selected_tab == 'friends'">selected_view_section<vb:else />view_section</vb:if>">
{vb:raw blocks.friends}
</div>
<div id="view-infractions-content" class="<vb:if condition="$selected_tab == 'infractions'">selected_view_section<vb:else />view_section</vb:if>">
{vb:raw blocks.infractions}
</div>

{vb:raw template_hook.profile_left}
</div>
</div>
</div>

{vb:raw footer}
</body>
</html>

Lynne
01-01-2010, 05:22 PM
The code I posted was not complete code. It was code you will need to use in your custom template that you need to create for your tab. The article tells you to create a template. You CANNOT use the code she posted since it is vb3 template code. What does your template look like (you should look at other tabs and see what code is needed) and what is it called (it should be called memberinfo_block_mymodification)

ageurtse
01-01-2010, 05:53 PM
my template says

<div id="view-mymodification" class="<vb:if condition="$selected_tab == 'mymodification'">selected_view_section<vb:else />view_section</vb:if>">
{$block_data[mymodification]}
</div>

this is almost working, only i get now on my life test site 2 lines with div id= "....." when i change the tab only the first div is changed into class="view_section_selected"


<div id="view-mymodification" class="block">
<div id="view-mymodification" class="view_section">\nContent to show in the tab.\n</div>
</div>


the plugin is default from the article

when i look at, memberinfo_block_aboutme, there is only html code and some vb stuff not rellated to this problem.

i realy don't know.

maybe it would help if i could find the hook location is a template, but when i search the templates it comes up with no hits.

maybe it's me, that i'm a beginner. so when it's to much trouble leave it and close this treaht. i'm stuck on this for 4 days now, i becom a bit crazy

--------------- Added 1262378496 at 1262378496 ---------------

lynne,maybe you have a peace of working plugin and template, so i could see how you did it?

Lynne
01-01-2010, 07:52 PM
You aren't putting 'names' above any of your template code so I can't tell what templates you are posting (nor can I tell why you have two - you should only have one, I would think).

I didnt' really want to post my template because it is on my RC4 site - I haven't upgraded that particular test site to Gold yet. However, here is mine which will hopefully work on gold.

template name - memberinfo_block_mytorrentstats
<div id="view-{vb:raw id}" <vb:if condition="$selected_tab == 'mytorrentstats'"> class="selected_view_section"<vb:else />class="view_section"</vb:if>>
<h3 class="subsectionhead">Torrent Stats</h3>
{vb:raw block_data.mytorrentstats}
</div>
<div class="underblock"></div>
<!-- / {vb:raw id} -->

ageurtse
01-01-2010, 08:08 PM
and your plugin looks like what i have except for what it's given back. but building the block and giving back it's content.

the template name where i speake about is memberinfo_block_mymodification

block_data.mytorrentstats is what you get back from your plugin ?

Lynne
01-01-2010, 08:35 PM
Ours are similar. One mistake you are making in yours is that you are not allowed to use the same id twice on a page. You are. I don't know if that is causing the problem, but it always helps to get rid of any html/css errors to eliminate those as the culprit.

ageurtse
01-02-2010, 04:22 AM
it still isn't going to work !

it shows nothing, still keeping the 2 div lines. within the first line class is block.
and no output is showing.

i think it is in my plugin but i can't find simmular mod's/plugins to see how they did it.




my template name is now:

memberinfo_block_mymodification
<div id="view-mymodification" <vb:if condition="$selected_tab == 'mymodification'"> class="selected_view_section"<vb:else />class="view_section"</vb:if>>
<h3 class="subsectionhead">Bijlages</h3>
{vb:raw block_data.mymymodification}
</div>
<div class="underblock"></div>
<!-- / {vb:raw id} --> [/PHP

plugin name

extra tab
[PHP]$blocklist = array_merge($blocklist, array(
'mymodification' => array(
'class' => 'MyModification',
'title' => 'My Modification',
'hook_location' => 'profile_left_last'
)
));

class vB_ProfileBlock_MyModification extends vB_ProfileBlock
{
var $template_name = 'memberinfo_block_mymodification';

function confirm_empty_wrap()
{
return false;
}

function confirm_display()
{
return ($this->block_data['mymodification'] != '');
}

function prepare_output($id = '', $options = array())
{
$this->block_data['mymodification'] = 'Content to show in the tab.';
}
}

@lynn, the 2 div lines are automaticly generated and i don't know why there are 2 lines and not one.

ageurtse
01-03-2010, 05:03 AM
After some help from lynne, whe finnaly mannaged to get this plugin to work

what was wrong, in the plugin there should be an extra line wrap = false, see a part of the plugin.


$blocklist = array_merge($blocklist, array(
'mymodification' => array(
'class' => 'MyModification',
'title' => 'My Modification',
'hook_location' => 'profile_left_last',
'wrap' => false,
)
));

and there was a typo in my template so the template could not work.