News:

SMF 2.1.4 has been released! Take it for a spin! Read more.

Main Menu

[SMF Trick] Embedding Google +1 Button in Posts

Started by ascaland, June 04, 2011, 02:02:27 PM

Previous topic - Next topic

ascaland

This SMF Trick will show you how to add the new Google +1 button to your topic posts! What is this button I speak of?
http://www.youtube.com/watch?v=4RyY2-ofP4g

First off, you can find its API reference here,
http://code.google.com/apis/+1button

Lets get started. The +1 button uses Javascript to render the button on the page. There are a variety of ways to include the button in your webpage, using a custom tag (g:plusone), Javascript, and so on as you can see in the reference. This tutorial will use Javascript inclusion.

Begin by entering your theme's index.template.php file, this is where the API will be retrieved. Of course, there are other ways to retrieve this page in SMF without even needing a template edit, but for simplicity it will be retrieved here. Below,
<script type="text/javascript" src="', $settings['theme_url'], '/scripts/theme.js?rc5"></script>
Add,
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
      {"parsetags": "explicit"}
</script>


Now in your theme's Display.template.php, we will be rendering each button here. The div used to render the button will be,
<div id="plusone_msg_' . $message['id'] . '"></div>
This will enable the button for each specific message, this is will be of use for each button's href attribute.

Under,
<hr class="post_separator" />
Add,
<script type="text/javascript">
gapi.plusone.render("plusone_msg_' . $message['id'] . '", {"size": "standard", "count": "true", "href" : "' . $message['href'] . '"});
</script>


This will invoke the button for each message. If the code cannot be found, then echo the script right before the following while loop ends,
// Get all the messages...
while ($message = $context['get_message']())



Now to get the button displaying! There are a variety of places you can place this button. Make sure if your placing the button anywhere else other than posts you include the above script into the page, that is responsible for rendering the button!

Under every signature
Code (After) Select
// Show the member's signature?
if (!empty($message['member']['signature']) && empty($options['show_no_signatures']) && $context['signature_enabled'])
echo '
<div class="signature" id="msg_', $message['id'], '_signature">', $message['member']['signature'], '</div>';

Code (Add) Select
echo '<div id="plusone_msg_' . $message['id'] . '"></div>';

Beside each subject
Code (Replace) Select
<a href="', $message['href'], '" rel="nofollow">', $message['subject'], '</a>
Code (With) Select
<a href="', $message['href'], '" rel="nofollow">', $message['subject'], '</a> <div id="plusone_msg_' . $message['id'] . '"></div>

Under custom fields
Code (Before) Select
// Done with the information about the poster... on to the post itself.
Code (Add) Select
echo '<li><div id="plusone_msg_' . $message['id'] . '"></div></li>';


And there you have it! Of course there are many places to have this button dispalyed, but thats only the tip of the iceberg. Dont forget to visit the reference to check out some of the nifty features it has including button size, language, callbacks, etc.

One extra thing I will include is how to use the callback that will display a message when the user clocks the button. In index.template.php, below,
<script type="text/javascript"><!-- // --><![CDATA[
Add,
function plusoneCallback(data) {
var buttonData = data;
if (buttonData["state"] == "on")
alert("+1\'d post!");
else
alert("-1\'d post.. :(");
}


Enjoy!



~DS~

This can be added under the linktree?

theme_linktree();

I was trying to add it next to FB Like.

"There is no god, and that's the simple truth. If every trace of any single religion were wiped out and nothing were passed on, it would never be created exactly that way again. There might be some other nonsense in its place, but not that exact nonsense. If all of science were wiped out, it would still be true and someone would find a way to figure it all out again."
~Penn Jillette – God, NO! – 2011

ascaland

If you place it there, will the +1 button be used for each topic instead? Seems like you dont want it for every post but every topic.

~DS~

Quote from: Project Evolution on June 05, 2011, 11:56:29 AM
If you place it there, will the +1 button be used for each topic instead? Seems like you dont want it for every post but every topic.
That's right. Everyone have their own opinion. :)
"There is no god, and that's the simple truth. If every trace of any single religion were wiped out and nothing were passed on, it would never be created exactly that way again. There might be some other nonsense in its place, but not that exact nonsense. If all of science were wiped out, it would still be true and someone would find a way to figure it all out again."
~Penn Jillette – God, NO! – 2011

ascaland

Looks like we are modifying the index template again rather than one in Display. Im not exactly sure where you have put that button, but if you want it below the linktree, then the below instructions will do.

Code (Below) Select
theme_linktree();
Code (Add) Select
// Check to see we are in a topic
if (!empty($context['current_topic'])) {
echo '<div id="plusone_topic_' . $context['current_topic'] . '"></div>';
}

And you have a choice here, you can either put the Javascript,
<script type="text/javascript">
gapi.plusone.render("plusone_topic_' . $context['current_topic'] . '", {"size": "standard", "count": "true", "href" : "' . $context['canonical_url'] . '"});
</script>

Under the above echo in the if statement, or if you plan on using it somewhere else possibly, at the bottom of the page in the template_body_below() function. If you do that, make sure to place that Javascript code in the same if statement as the one above.

Truts2

Hey, how I can add this button on my main forum index.php page, not into topic ?

ascaland

If you want it on the index (assuming in the same place), instead of having the div inside an if statement it wont be. Just remove the if statement and replace that echo with this,
echo '<div id="plusone_MYFORUMNAME"></div>';

And the javascript also changes,
<script type="text/javascript">
gapi.plusone.render("plusone_MYFORUMNAME", {"size": "standard", "count": "true", "href" : "' . $scripturl . '"});
</script>


Basically this sets the button to count for the forum. If you want it for a different URL then just take out ' . $scripturl . '[.b]. Dont forget to change MYFORUMNAME!

Truts2

Ok, thanks, but I make it on my own way. I installed a mod from SMFhacks (for topis) and then I copy this code
<g:plusone href="' . $scripturl . '?topic=' . $context['current_topic'] . '" size="tall" ></g:plusone>
<script type="text/javascript" src="http://apis.google.com/js/plusone.js"></script>

to my main index forum page (into statistic area) and it's works great!
Both to +1'd for topics and for main forum.

But I want to add a other language to this button.
This code:

<g:plusone href="' . $scripturl . '?topic=' . $context['current_topic'] . '" size="tall" ></g:plusone>
<script type="text/javascript" src="http://apis.google.com/js/plusone.js">
{lang: 'pl'}
</script>

does not work.
Any ideas for that ?

ascaland

Looks like that would spew out an error. Try this,
<g:plusone href="' . $scripturl . '?topic=' . $context['current_topic'] . '" size="tall" ></g:plusone>
<script type="text/javascript" src="http://apis.google.com/js/plusone.js">
{lang : "pl"}
</script>

Truts2

@Project Evolution - it's working!
Thank You so much :)

PLAYBOY

I dont have this or anything like this.
<script type="text/javascript" src="', $settings['theme_url'], '/scripts/theme.js?rc5"></script>

in my template index.template.php
1.1.13

ascaland

Then just find something similar like that snippet, basically you can put that anywhere in the above (head) part of the template. If you dont understand just attach the file in your next post.

PLAYBOY

#14
I put it in the head section of the index.template but i couldnt figure out the rest of the trick. Here is my display.template.php which is the default one because my theme doesnt have this file.

Update: Looks like i cant attach a file so im gonna post it in the message.

[code]<?php
// Version: 1.1.12; Display

function template_main()
{
   global $context, $settings, $options, $txt, $scripturl, $modSettings;
   //Display ads on the thread page
   if (function_exists("show_threadAds"))
   {
      $ads = show_threadAds();   
      if(!empty($ads))
         if($ads['type']==0)
            echo $ads['content'];
         else
            eval($ads['content']);
      unset($ads);
   }


   // Show the anchor for the top and for the first message. If the first message is new, say so.
   echo '
<a name="top"></a>
<a name="msg', $context['first_message'], '"></a>', $context['first_new_message'] ? '<a name="new"></a>' : '';

      // Show the linktree
   echo '
<div>', theme_linktree(), '</div>';

   // Is this topic also a poll?
   if ($context['is_poll'])
   {
      echo '
<table cellpadding="3" cellspacing="0" border="0" width="100%" class="tborder" style="padding-top: 0; margin-bottom: 2ex;">
   <tr>
      <td class="titlebg" colspan="2" valign="middle" style="padding-left: 6px;">
         <img src="', $settings['images_url'], '/topic/', $context['poll']['is_locked'] ? 'normal_poll_locked' : 'normal_poll', '.gif" alt="" align="bottom" /> ', $txt['smf43'], '
      </td>
   </tr>
   <tr>
      <td width="5%" valign="top" class="windowbg"><b>', $txt['smf21'], ':</b></td>
      <td class="windowbg">
         ', $context['poll']['question'];
      if (!empty($context['poll']['expire_time']))
         echo '
               &nbsp;(', ($context['poll']['is_expired'] ? $txt['poll_expired_on'] : $txt['poll_expires_on']), ': ', $context['poll']['expire_time'], ')';

      // Are they not allowed to vote but allowed to view the options?
      if ($context['poll']['show_results'] || !$context['allow_vote'])
      {
         echo '
         <table>
            <tr>
               <td style="padding-top: 2ex;">
                  <table border="0" cellpadding="0" cellspacing="0">';

            // Show each option with its corresponding percentage bar.
         foreach ($context['poll']['options'] as $option)
            echo '
                     <tr>
                        <td style="padding-right: 2ex;', $option['voted_this'] ? 'font-weight: bold;' : '', '">', $option['option'], '</td>', $context['allow_poll_view'] ? '
                        <td nowrap="nowrap">' . $option['bar'] . ' ' . $option['votes'] . ' (' . $option['percent'] . '%)</td>' : '', '
                     </tr>';

         echo '
                  </table>
               </td>
               <td valign="bottom" style="padding-left: 15px;">';

         // If they are allowed to revote - show them a link!
         if ($context['allow_change_vote'])
            echo '
               <a href="', $scripturl, '?action=vote;topic=', $context['current_topic'], '.', $context['start'], ';poll=', $context['poll']['id'], ';sesc=', $context['session_id'], '">', $txt['poll_change_vote'], '</a><br />';

         // If we're viewing the results... maybe we want to go back and vote?
         if ($context['poll']['show_results'] && $context['allow_vote'])
            echo '
                  <a href="', $scripturl, '?topic=', $context['current_topic'], '.', $context['start'], '">', $txt['poll_return_vote'], '</a><br />';

         // If they're allowed to lock the poll, show a link!
         if ($context['poll']['lock'])
            echo '
                  <a href="', $scripturl, '?action=lockVoting;topic=', $context['current_topic'], '.', $context['start'], ';sesc=', $context['session_id'], '">', !$context['poll']['is_locked'] ? $txt['smf30'] : $txt['smf30b'], '</a><br />';

         // If they're allowed to edit the poll... guess what... show a link!
         if ($context['poll']['edit'])
            echo '
                  <a href="', $scripturl, '?action=editpoll;topic=', $context['current_topic'], '.', $context['start'], '">', $txt['smf39'], '</a>';

         echo '
               </td>
            </tr>', $context['allow_poll_view'] ? '
            <tr>
               <td colspan="2"><b>' . $txt['smf24'] . ': ' . $context['poll']['total_votes'] . '</b></td>
            </tr>' : '', '
         </table><br />';
      }
      // They are allowed to vote! Go to it!
      else
      {
         echo '
         <form action="', $scripturl, '?action=vote;topic=', $context['current_topic'], '.', $context['start'], ';poll=', $context['poll']['id'], '" method="post" accept-charset="', $context['character_set'], '" style="margin: 0px;">
            <table>
               <tr>
                  <td colspan="2">';

         // Show a warning if they are allowed more than one option.
         if ($context['poll']['allowed_warning'])
            echo '
                     ', $context['poll']['allowed_warning'], '
                  </td>
               </tr><tr>
                  <td>';

         // Show each option with its button - a radio likely.
         foreach ($context['poll']['options'] as $option)
            echo '
                     ', $option['vote_button'], ' ', $option['option'], '<br />';

         echo '
                  </td>
                  <td valign="bottom" style="padding-left: 15px;">';

         // Allowed to view the results? (without voting!)
         if ($context['allow_poll_view'])
            echo '
                     <a href="', $scripturl, '?topic=', $context['current_topic'], '.', $context['start'], ';viewResults">', $txt['smf29'], '</a><br />';

         // Show a link for locking the poll as well...
         if ($context['poll']['lock'])
            echo '
                     <a href="', $scripturl, '?action=lockVoting;topic=', $context['current_topic'], '.', $context['start'], ';sesc=', $context['session_id'], '">', (!$context['poll']['is_locked'] ? $txt['smf30'] : $txt['smf30b']), '</a><br />';

         // Want to edit it? Click right here......
         if ($context['poll']['edit'])
            echo '
                     <a href="', $scripturl, '?action=editpoll;topic=', $context['current_topic'], '.', $context['start'], '">', $txt['smf39'], '</a>';

            echo '
                  </td>
               </tr><tr>
                  <td colspan="2"><input type="submit" value="', $txt['smf23'], '" /></td>
               </tr>
            </table>
            <input type="hidden" name="sc" value="', $context['session_id'], '" />
         </form>';
      }

      echo '
      </td>
   </tr>
</table>';
   }

   // Does this topic have some events linked to it?
   if (!empty($context['linked_calendar_events']))
   {
      echo '
<table cellpadding="3" cellspacing="0" border="0" width="100%" class="tborder" style="padding-top: 0; margin-bottom: 3ex;">
      <tr>
            <td class="titlebg" valign="middle" align="left" style="padding-left: 6px;">
                  ', $txt['calendar_linked_events'], '
            </td>
      </tr>
      <tr>
            <td width="5%" valign="top" class="windowbg">
                  <ul>';
      foreach ($context['linked_calendar_events'] as $event)
         echo '
                        <li>
                           ', ($event['can_edit'] ? '<a href="' . $event['modify_href'] . '" style="color: red;">*</a> ' : ''), '<b>', $event['title'], '</b>: ', $event['start_date'], ($event['start_date'] != $event['end_date'] ? ' - ' . $event['end_date'] : ''), '
                        </li>';
      echo '
                  </ul>
            </td>
      </tr>
</table>';
   }

   // Build the normal button array.
   $normal_buttons = array(
      'reply' => array('test' => 'can_reply', 'text' => 146, 'image' => 'reply.gif', 'lang' => true, 'url' => $scripturl . '?action=post;topic=' . $context['current_topic'] . '.' . $context['start'] . ';num_replies=' . $context['num_replies']),
      'notify' => array('test' => 'can_mark_notify', 'text' => 125, 'image' => 'notify.gif', 'lang' => true, 'custom' => 'onclick="return confirm(\'' . ($context['is_marked_notify'] ? $txt['notification_disable_topic'] : $txt['notification_enable_topic']) . '\');"', 'url' => $scripturl . '?action=notify;sa=' . ($context['is_marked_notify'] ? 'off' : 'on') . ';topic=' . $context['current_topic'] . '.' . $context['start'] . ';sesc=' . $context['session_id']),
      'custom' => array(),
      'send' => array('test' => 'can_send_topic', 'text' => 707, 'image' => 'sendtopic.gif', 'lang' => true, 'url' => $scripturl . '?action=sendtopic;topic=' . $context['current_topic'] . '.0'),
      'print' => array('text' => 465, 'image' => 'print.gif', 'lang' => true, 'custom' => 'target="_blank"', 'url' => $scripturl . '?action=printpage;topic=' . $context['current_topic'] . '.0'),
   );

   // Special case for the custom one.
   if ($context['user']['is_logged'] && $settings['show_mark_read'])
      $normal_buttons['custom'] = array('text' => 'mark_unread', 'image' => 'markunread.gif', 'lang' => true, 'url' => $scripturl . '?action=markasread;sa=topic;t=' . $context['mark_unread_time'] . ';topic=' . $context['current_topic'] . '.' . $context['start'] . ';sesc=' . $context['session_id']);
   elseif ($context['can_add_poll'])
      $normal_buttons['custom'] = array('text' => 'add_poll', 'image' => 'add_poll.gif', 'lang' => true, 'url' => $scripturl . '?action=editpoll;add;topic=' . $context['current_topic'] . '.' . $context['start'] . ';sesc=' . $context['session_id']);
   else
      unset($normal_buttons['custom']);

   //Thank You Button is now where it belongs <<
   if (isset($context['thank_you']['premission'])) {
      if ($context['thank_you']['premission']['post'])
         $normal_buttons['thankyou'] = array('text' => 'd_thank_you', 'image' => 'thank_you.gif', 'lang' => true, 'url' => $scripturl . '?action=thankyoupost;topic=' . $context['current_topic'] . '.0');
      elseif ($context['thank_you']['premission']['add'])
         $normal_buttons['thankyou'] = array('text' => 'd_thank_you_add', 'image' => 'thank_you_add.gif', 'lang' => true, 'url' => $scripturl . '?action=thankyouadd;topic=' . $context['current_topic'] . '.0');
   }

   // Make Article Button
   if ($context['can_make_article'] && !empty($modSettings['articleactive']))
      $normal_buttons['article'] = array('text' => 'sp-' . ($context['topic_is_article'] ? 'remove' : 'add') . '_article', 'image' => 'addarticle.gif', 'lang' => true, 'url' => $scripturl . '?action=portal;sa=' . ($context['topic_is_article'] ? 'remove' : 'add') . 'article;message=' . $context['topic_first_message'] . ';return=' . $context['current_topic'] . '.' . $context['start'] . ';sesc=' . $context['session_id']);

   // Show the page index... "Pages: [1]".
   echo '
<table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr>
      <td class="middletext" valign="bottom" style="padding-bottom: 4px;">', $txt[139], ': ', $context['page_index'], !empty($modSettings['topbottomEnable']) ? $context['menu_separator'] . ' &nbsp;&nbsp;<a href="#lastPost"><b>' . $txt['topbottom5'] . '</b></a>' : '', '</td>
      <td align="right" style="padding-right: 1ex;">
         <div class="nav" style="margin-bottom: 2px;"> ', $context['previous_next'], '</div>
         <table cellpadding="0" cellspacing="0">
            <tr>
               ', template_button_strip($normal_buttons, 'bottom'), '
            </tr>
         </table>
      </td>
   </tr>
</table>';

   // Show the topic information - icon, subject, etc.
   echo '
<table width="100%" cellpadding="3" cellspacing="0" border="0" class="tborder" style="border-bottom: 0;">
      <tr class="catbg3">
            <td valign="middle" width="2%" style="padding-left: 6px;">
                  <img src="', $settings['images_url'], '/topic/', $context['class'], '.gif" align="bottom" alt="" />
            </td>
            <td width="13%"> ', $txt[29], '</td>
            <td valign="middle" width="85%" style="padding-left: 6px;" id="top_subject">
                  ', $txt[118], ': ', $context['subject'], ' &nbsp;(', $txt[641], ' ', $context['num_views'], ' ', $txt[642], ')
            </td>
      </tr>';
   if (!empty($settings['display_who_viewing']))
   {
      echo '
      <tr>
            <td colspan="3" class="smalltext">';

      // Show just numbers...?
      if ($settings['display_who_viewing'] == 1)
            echo count($context['view_members']), ' ', count($context['view_members']) == 1 ? $txt['who_member'] : $txt[19];
      // Or show the actual people viewing the topic?
      else
         echo empty($context['view_members_list']) ? '0 ' . $txt[19] : implode(', ', $context['view_members_list']) . ((empty($context['view_num_hidden']) || $context['can_moderate_forum']) ? '' : ' (+ ' . $context['view_num_hidden'] . ' ' . $txt['hidden'] . ')');

      // Now show how many guests are here too.
      echo $txt['who_and'], $context['view_num_guests'], ' ', $context['view_num_guests'] == 1 ? $txt['guest'] : $txt['guests'], $txt['who_viewing_topic'], '
            </td>
      </tr>';
   }

   echo '
</table>';

   echo '
<form action="', $scripturl, '?action=quickmod2;topic=', $context['current_topic'], '.', $context['start'], '" method="post" accept-charset="', $context['character_set'], '" name="quickModForm" id="quickModForm" style="margin: 0;" onsubmit="return in_edit_mode == 1 ? modify_save(\'' . $context['session_id'] . '\') : confirm(\'' . $txt['quickmod_confirm'] . '\');">';

   // These are some cache image buttons we may want.
   $reply_button = create_button('quote.gif', 145, 'smf240', 'align="middle"');
   $modify_button = create_button('modify.gif', 66, 17, 'align="middle"');
   $remove_button = create_button('delete.gif', 121, 31, 'align="middle"');
   $split_button = create_button('split.gif', 'smf251', 'smf251', 'align="middle"');

// Time to display all the posts
   echo '
<table cellpadding="0" cellspacing="0" border="0" width="100%" class="bordercolor" id="postTable">';

   //Ad Counter
   $adcounter =0;
   // Get all the messages...
   while ($message = $context['get_message']())
   {
      $adcounter++;
      echo '
   <tr><td style="padding: 1px 1px 0 1px;">';

      // Show the message anchor and a "new" anchor if this message is new.
      if ($message['id'] != $context['first_message'])
         echo '
      <a name="msg', $message['id'], '"></a>', $message['first_new'] ? '<a name="new"></a>' : '';

      // For those modifying your custom template: This must be put in the proper location, which would be
      // before the table that contains the post, but inside the cell that contains it.  If you're unsure where to place
      // this, look for the <a name="msg"... as above in the default template and this code should go directly after
      // that. 
      if (isset($context['single-post']))
         echo '
<!-- Start Single Post -->';

      echo '
      <table width="100%" cellpadding="3" cellspacing="0" border="0">
         <tr><td class="', $message['alternate'] == 0 ? 'windowbg' : 'windowbg2', '">';

      // Show information about the poster of this message. Also Highlight the Background if necessary.
      echo '
            <table width="100%" cellpadding="5" cellspacing="0" style="table-layout: fixed;', !empty($message['highlightcolor']) ? 'background-color:#'.$message['highlightcolor'].';' : '', '">
               <tr>
                  <td valign="top" width="16%" rowspan="2" style="overflow: hidden;">
                     <b>', $message['member']['link'], '</b>
                     <div class="smalltext">';

      // Show the member's custom title, if they have one.
      if (isset($message['member']['title']) && $message['member']['title'] != '')
         echo '
                        ', $message['member']['title'], '<br />';

      // Show the member's primary group (like 'Administrator') if they have one.
      if (isset($message['member']['group']) && $message['member']['group'] != '')
         echo '
                        ', $message['member']['group'], '<br />';

      // Don't show these things for guests.
      if (!$message['member']['is_guest'])
      {
         // Show the post group if and only if they have no other group or the option is on, and they are in a post group.
         if ((empty($settings['hide_post_group']) || $message['member']['group'] == '') && $message['member']['post_group'] != '')
            echo '
                        ', $message['member']['post_group'], '<br />';
         echo '
                        ', $message['member']['group_stars'], '<br />';

         // Is karma display enabled?  Total or +/-?
         if ($modSettings['karmaMode'] == '1')
            echo '
                        <br />
                        ', $modSettings['karmaLabel'], ' ', $message['member']['karma']['good'] - $message['member']['karma']['bad'], '<br />';
         elseif ($modSettings['karmaMode'] == '2')
            echo '
                        <br />
                        ', $modSettings['karmaLabel'], ' +', $message['member']['karma']['good'], '/-', $message['member']['karma']['bad'], '<br />';

         // Is this user allowed to modify this member's karma?
         if ($message['member']['karma']['allow'])
            echo '
                        <a href="', $scripturl, '?action=modifykarma;sa=applaud;uid=', $message['member']['id'], ';topic=', $context['current_topic'], '.' . $context['start'], ';m=', $message['id'], ';sesc=', $context['session_id'], '">', $modSettings['karmaApplaudLabel'], '</a>
                        <a href="', $scripturl, '?action=modifykarma;sa=smite;uid=', $message['member']['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';m=', $message['id'], ';sesc=', $context['session_id'], '">', $modSettings['karmaSmiteLabel'], '</a><br />';

         // Show online and offline buttons?
         if (!empty($modSettings['onlineEnable']) && !$message['member']['is_guest'])
            echo '
                        ', $context['can_send_pm'] ? '<a href="' . $message['member']['online']['href'] . '" title="' . $message['member']['online']['label'] . '">' : '', $settings['use_image_buttons'] ? '<img src="' . $message['member']['online']['image_href'] . '" alt="' . $message['member']['online']['text'] . '" border="0" style="margin-top: 2px;" />' : $message['member']['online']['text'], $context['can_send_pm'] ? '</a>' : '', $settings['use_image_buttons'] ? '<span class="smalltext"> ' . $message['member']['online']['text'] . '</span>' : '', '<br /><br />';

         // Show the member's gender icon?
         if (!empty($settings['show_gender']) && $message['member']['gender']['image'] != '')
            echo '
                        ', $txt[231], ': ', $message['member']['gender']['image'], '<br />';

         // Begin modification Location on posts
         // Show the member's location
         if ($message['member']['location'] != '')
            echo '
                        ', $txt[227], ': ', $message['member']['location'], '<br />';
         // End modification
         
         loadLanguage('Profile');
         // Show the member's age
         if (isset($message['member']['age']))
            echo '
                        ', $txt[420], ': ', $message['member']['age'], '<br />';

         
         // Show how many posts they have made.
         echo '
                        ', $txt[26], ': ', $message['member']['posts'], '<br />
                        <br />';

         // Show avatars, images, etc.?
         if (!empty($settings['show_user_images']) && empty($options['show_no_avatars']) && !empty($message['member']['avatar']['image']))
            echo '
                        <div style="overflow: auto; width: 100%;">', $message['member']['avatar']['image'], '</div><br />';

         // Show their personal text?
         if (!empty($settings['show_blurb']) && $message['member']['blurb'] != '')
            echo '
                        ', $message['member']['blurb'], '<br />
                        <br />';

         // This shows the popular messaging icons.
         echo '
                        ', $message['member']['icq']['link'], '
                        ', $message['member']['msn']['link'], '
                        ', $message['member']['aim']['link'], '
                        ', $message['member']['yim']['link'], '<br />';

         // Show the profile, website, email address, and personal message buttons.
         if ($settings['show_profile_buttons'])
         {
            // Don't show the profile button if you're not allowed to view the profile.
            if ($message['member']['can_view_profile'])
               echo '
                        <a href="', $message['member']['href'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/icons/profile_sm.gif" alt="' . $txt[27] . '" title="' . $txt[27] . '" border="0" />' : $txt[27]), '</a>';

            // Don't show an icon if they haven't specified a website.
            if ($message['member']['website']['url'] != '')
               echo '
                        <a href="', $message['member']['website']['url'], '" title="' . $message['member']['website']['title'] . '" target="_blank">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/www_sm.gif" alt="' . $txt[515] . '" border="0" />' : $txt[515]), '</a>';

            // Don't show the email address if they want it hidden.
            if (empty($message['member']['hide_email']))
               echo '
                        <a href="mailto:', $message['member']['email'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.gif" alt="' . $txt[69] . '" title="' . $txt[69] . '" border="0" />' : $txt[69]), '</a>';

            // Since we know this person isn't a guest, you *can* message them.
            if ($context['can_send_pm'])
               echo '
                        <a href="', $scripturl, '?action=pm;sa=send;u=', $message['member']['id'], '" title="', $message['member']['online']['label'], '">', $settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/im_' . ($message['member']['online']['is_online'] ? 'on' : 'off') . '.gif" alt="' . $message['member']['online']['label'] . '" border="0" />' : $message['member']['online']['label'], '</a>';
         }
      }
      // Otherwise, show the guest's email.
      elseif (empty($message['member']['hide_email']))
         echo '
                        <br />
                        <br />
                        <a href="mailto:', $message['member']['email'], '">', ($settings['use_image_buttons'] ? '<img src="' . $settings['images_url'] . '/email_sm.gif" alt="' . $txt[69] . '" title="' . $txt[69] . '" border="0" />' : $txt[69]), '</a>';

      // Done with the information about the poster... on to the post itself.
      echo '
                     </div>
                  </td>
                  <td valign="top" width="85%" height="100%">
                     <table width="100%" border="0"><tr>
                        <td valign="middle"><a href="', $message['href'], '"><img src="', $message['icon_url'] . '" alt="" border="0" /></a></td>
                        <td valign="middle">
                           <div style="font-weight: bold;" id="subject_', $message['id'], '">
                              <a href="', $message['href'], '">', $message['subject'], '</a>
                           </div>';

      // If this is the first post, (#0) just say when it was posted - otherwise give the reply #.
      echo '
                           <div class="smalltext">&#171; <b>', !empty($message['counter']) ? '<a href="'.$scripturl.'?topic=' . $context['current_topic'] . '.0;msg='.$message['id'].'">' . $txt[146] . ' #' . $message['counter'] . '</a>': '', ' ', $txt[30], ':</b> ', $message['time'], ' &#187;</div></td>
                        <td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" height="20" style="font-size: smaller;">';

      // Can they reply? Have they turned on quick reply?
      if ($context['can_reply'] && !empty($options['display_quick_reply']))
         echo '
               <a href="', $scripturl, '?action=post;quote=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';num_replies=', $context['num_replies'], ';sesc=', $context['session_id'], '" onclick="doQuote(', $message['id'], ', \'', $context['session_id'], '\'); return false;">', $reply_button, '</a>';

      // So... quick reply is off, but they *can* reply?
      elseif ($context['can_reply'])
         echo '
               <a href="', $scripturl, '?action=post;quote=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';num_replies=', $context['num_replies'], ';sesc=', $context['session_id'], '">', $reply_button, '</a>';

      // Can the user modify the contents of this post?
      if ($message['can_modify'])
         echo '
               <a href="', $scripturl, '?action=post;msg=', $message['id'], ';topic=', $context['current_topic'], '.', $context['start'], ';sesc=', $context['session_id'], '">', $modify_button, '</a>';

      // How about... even... remove it entirely?!
      if ($message['can_remove'])
         echo '
               <a href="', $scripturl, '?action=deletemsg;topic=', $context['current_topic'], '.', $context['start'], ';msg=', $message['id'], ';sesc=', $context['session_id'], '" onclick="return confirm(\'', $txt[154], '?\');">', $remove_button, '</a>';

      // What about splitting it off the rest of the topic?
      if ($context['can_split'])
         echo '
               <a href="', $scripturl, '?action=splittopics;topic=', $context['current_topic'], '.0;at=', $message['id'], '">', $split_button, '</a>';

      // Show a checkbox for quick moderation?
      if (!empty($options['display_quick_mod']) && $options['display_quick_mod'] == 1 && $message['can_remove'])
         echo '
                           <input type="checkbox" name="msgs[]" value="', $message['id'], '" class="check" ', empty($settings['use_tabs']) ? 'onclick="document.getElementById(\'quickmodSubmit\').style.display = \'\';"' : '', ' />';

      // Show the post itself, finally!
      echo '
                        </td>
                     </tr></table>
                     <hr width="100%" size="1" class="hrcolor" />
                     <div class="post"', $message['can_modify'] ? ' id="msg_' . $message['id'] . '"' : '', '>', $message['body'], '</div>', $message['can_modify'] ? '
                     <img src="' . $settings['images_url'] . '/icons/modify_inline.gif" alt="" align="right" id="modify_button_' . $message['id'] . '" style="cursor: pointer; display: none;" onclick="modify_msg(\'' . $message['id'] . '\', \'' . $context['session_id'] . '\')" />' : '' , '
                  </td>
               </tr>';

      // Now for the attachments, signature, ip logged, etc...
      echo '
               <tr>
                  <td valign="bottom" class="smalltext" width="85%">
                     <table width="100%" border="0" style="table-layout: fixed;"><tr>
                        <td colspan="2" class="smalltext" width="100%">';

      // Assuming there are attachments...
      if (!empty($message['attachment']))
      {
         echo '
                           <hr width="100%" size="1" class="hrcolor" />
                           <div style="overflow: auto; width: 100%;">';
         foreach ($message['attachment'] as $attachment)
         {
            if ($attachment['is_image'])
            {
               if ($attachment['thumbnail']['has_thumb'])
                  echo '
                           <a href="', $attachment['href'], ';image" id="link_', $attachment['id'], '" onclick="', $attachment['thumbnail']['javascript'], '"><img src="', $attachment['thumbnail']['href'], '" alt="" id="thumb_', $attachment['id'], '" border="0" /></a><br />';
               else
                  echo '
                           <img src="' . $attachment['href'] . ';image" alt="" width="' . $attachment['width'] . '" height="' . $attachment['height'] . '" border="0" /><br />';
            }
            echo '
                              <a href="' . $attachment['href'] . '"><img src="' . $settings['images_url'] . '/icons/clip.gif" align="middle" alt="*" border="0" />&nbsp;' . $attachment['name'] . '</a> (', $attachment['size'], ($attachment['is_image'] ? ', ' . $attachment['real_width'] . 'x' . $attachment['real_height'] . ' - ' . $txt['attach_viewed'] : ' - ' . $txt['attach_downloaded']) . ' ' . $attachment['downloads'] . ' ' . $txt['attach_times'] . '.)<br />';
         }

         echo '
                           </div>';
      }

      echo '
                        </td>
                     </tr><tr>
                        <td valign="bottom" class="smalltext" id="modified_', $message['id'], '">';

      // Show "« Last Edit: Time by Person »" if this post was edited.
      if ($settings['show_modify'] && !empty($message['modified']['name']))
         echo '
                           &#171; <i>', $txt[211], ': ', $message['modified']['time'], ' ', $txt[525], ' ', $message['modified']['name'], '</i> &#187;';

      echo '
                        </td>
                        <td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" class="smalltext">';

                        echo '<div id="plusone_MYFORUMNAME"></div>';
                        
      // Maybe they want to report this post to the moderator(s)?
      if ($context['can_report_moderator'])
         echo '
                           <a href="', $scripturl, '?action=reporttm;topic=', $context['current_topic'], '.', $message['counter'], ';msg=', $message['id'], '">', $txt['rtm1'], '</a> &nbsp;';
      echo '
                           <img src="', $settings['images_url'], '/ip.gif" alt="" border="0" />';

      // Show the IP to this user for this post - because you can moderate?
      if ($context['can_moderate_forum'] && !empty($message['member']['ip']))
         echo '
                           <a href="', $scripturl, '?action=trackip;searchip=', $message['member']['ip'], '">', $message['member']['ip'], '</a> <a href="', $scripturl, '?action=helpadmin;help=see_admin_ip" onclick="return reqWin(this.href);" class="help">(?)</a>';
      // Or, should we show it because this is you?
      elseif ($message['can_see_ip'])
         echo '
                           <a href="', $scripturl, '?action=helpadmin;help=see_member_ip" onclick="return reqWin(this.href);" class="help">', $message['member']['ip'], '</a>';
      // Okay, are you at least logged in?  Then we can show something about why IPs are logged...
      elseif (!$context['user']['is_guest'])
         echo '
                           <a href="', $scripturl, '?action=helpadmin;help=see_member_ip" onclick="return reqWin(this.href);" class="help">', $txt[511], '</a>';
      // Otherwise, you see NOTHING!
      else
         echo '
                           ', $txt[511];

      echo '
                        </td>
                     </tr></table>';

      // Show the member's signature?
      if (!empty($message['member']['signature']) && empty($options['show_no_signatures']))
         echo '
                     <hr width="100%" size="1" class="hrcolor" />
                     <div class="signature">', $message['member']['signature'], '</div>';

      echo '
                  </td>
               </tr>
            </table>
         </td></tr>
      </table>';
      
      // Again, the location of this is very important and may be hard to find in a custom template.  The key is, as above in the
      // default template, look for the signature lines and it should go right after the second </table> below it
      if (isset($context['single-post']))
         echo '
<!-- End Single Post -->';

      echo '

   </td></tr>';
if (function_exists("show_posts"))
{
   if ($adpost = show_posts($adcounter))
   {
      if($modSettings['ads_lookLikePosts'])
      {
         echo '

   <tr><td style="padding: 1px 1px 0 1px;">
      <table width="100%" cellpadding="3" cellspacing="0" border="0">
         <tr><td class="windowbg3">
            <table width="100%" cellpadding="5" cellspacing="0" style="table-layout: fixed;">
               <tr>
                  <td valign="top" width="16%" rowspan="2" style="overflow: hidden;">
                     <b>', $context['forum_name'], '</b>
                     <div class="smalltext">
                     </div>
                  </td>
                  <td valign="top" width="85%" height="100%">
                     <table width="100%" border="0"><tr>
                        <td valign="middle"><img src="', $message['icon_url'] . '" alt="" border="0" /></td>
                        <td valign="middle">
                           <div style="font-weight: bold;" id="subject_', $message['id'], '">
                              <a href="', $message['href'], '">', $message['subject'], '</a>
                           </div>
                           <div class="smalltext">&#171; <b>', !empty($message['counter']) ? $txt[146] . ' #' . $message['counter'] : '', ' ', $txt[30], ':</b> ', $message['time'], ' &#187;</div></td>
                        <td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" height="20" style="font-size: smaller;">';
      if ($context['can_reply'] && !empty($options['display_quick_reply']))
         echo '
               ', $reply_button, '';

      // So... quick reply is off, but they *can* reply?
      elseif ($context['can_reply'])
         echo '
               ', $reply_button, '';

      // Can the user modify the contents of this post?
      if ($message['can_modify'])
         echo '
               ', $modify_button, '';

      // How about... even... remove it entirely?!
      if ($message['can_remove'])
         echo '
               ', $remove_button, '';

      // What about splitting it off the rest of the topic?
      if ($context['can_split'])
         echo '
               ', $split_button, '';
echo '
                        </td>
                     </tr></table>
                     <hr width="100%" size="1" class="hrcolor" />
                     <div class="post">', $adpost['type'] == 0 ? $adpost['content'] : eval($adpost['content']) , '</div>
                  </td>
               </tr>
               <tr>
                  <td valign="bottom" class="smalltext" width="85%">
                     <table width="100%" border="0" style="table-layout: fixed;"><tr>
                        <td colspan="2" class="smalltext" width="100%">
                     </tr><tr>
                        <td valign="bottom" class="smalltext" id="modified_', $message['id'], '">
                        </td>
                        <td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" class="smalltext">
                           <img src="', $settings['images_url'], '/ip.gif" alt="" border="0" />&nbsp;', $txt[511], '
                        </td>
                     </tr></table>
               </tr>
            </table>
         </td></tr>
      </table>
   </td></tr>';
      }
      else
         echo '
            <tr><td style="padding: 1px 1px 0 1px;">
               <table width="100%" cellpadding="3" cellspacing="0" border="0">
                  <tr>
                     <td class="windowbg3">', $adpost['type'] == 0 ? $adpost['content'] : eval($adpost['content']) , '</td>
                  </tr>
               </table>
            </td></tr>';         
   }
   
}

   }
   
   if(function_exists("show_lastpostAds") && function_exists("show_posts"))
   {
      if(($ads = show_lastpostAds()) && !show_posts($adcounter))
      {
         if($modSettings['ads_lookLikePosts'])
         {
               echo '

   <tr><td style="padding: 1px 1px 0 1px;">
      <table width="100%" cellpadding="3" cellspacing="0" border="0">
         <tr><td class="windowbg3">
            <table width="100%" cellpadding="5" cellspacing="0" style="table-layout: fixed;">
               <tr>
                  <td valign="top" width="16%" rowspan="2" style="overflow: hidden;">
                     <b>', $context['forum_name'], '</b>
                     <div class="smalltext">
                     </div>
                  </td>
                  <td valign="top" width="85%" height="100%">
                     <table width="100%" border="0"><tr>
                        <td valign="middle">&nbsp;</td>
                        <td valign="middle">
                           &nbsp;</td>
                        <td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" height="20" style="font-size: smaller;">';
      if ($context['can_reply'] && !empty($options['display_quick_reply']))
         echo '
               ', $reply_button, '';

      // So... quick reply is off, but they *can* reply?
      elseif ($context['can_reply'])
         echo '
               ', $reply_button, '';


echo '
                        </td>
                     </tr></table>
                     <hr width="100%" size="1" class="hrcolor" />
                     <div class="post">', $ads['type'] == 0 ? $ads['content'] : eval($ads['content']) , '</div>
                  </td>
               </tr>
               <tr>
                  <td valign="bottom" class="smalltext" width="85%">
                     <table width="100%" border="0" style="table-layout: fixed;"><tr>
                        <td colspan="2" class="smalltext" width="100%">
                     </tr><tr>
                        <td valign="bottom" class="smalltext" id="modified_', $message['id'], '">
                        </td>
                        <td align="', !$context['right_to_left'] ? 'right' : 'left', '" valign="bottom" class="smalltext">
                           <img src="', $settings['images_url'], '/ip.gif" alt="" border="0" />&nbsp;', $txt[511], '
                        </td>
                     </tr></table>
               </tr>
            </table>
         </td></tr>
      </table>
   </td></tr>';
         }
         else
            echo '
               <tr><td style="padding: 1px 1px 0 1px;">
                  <table width="100%" cellpadding="3" cellspacing="0" border="0">
                     <tr>
                        <td class="windowbg3">', $ads['type'] == 0 ? $ads['content'] : eval($ads['content']) , '</td>
                     </tr>
                  </table>
               </td></tr>';            
         
      }
      
   }
   echo '
   <tr><td style="padding: 0 0 1px 0;"></td></tr>
</table>
<a name="lastPost"></a>';

   // As before, build the custom button right.
   if ($context['can_add_poll'])
      $normal_buttons['custom'] = array('text' => 'add_poll', 'image' => 'add_poll.gif', 'lang' => true, 'url' => $scripturl . '?action=editpoll;add;topic=' . $context['current_topic'] . '.' . $context['start'] . ';sesc=' . $context['session_id']);
   elseif ($context['user']['is_logged'] && $settings['show_mark_read'])
      $normal_buttons['custom'] = array('text' => 'mark_unread', 'image' => 'markunread.gif', 'lang' => true, 'url' => $scripturl . '?action=markasread;sa=topic;t=' . $context['mark_unread_time'] . ';topic=' . $context['current_topic'] . '.' . $context['start'] . ';sesc=' . $context['session_id']);

   echo '
<table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr>
      <td class="middletext">', $txt[139], ': ', $context['page_index'], !empty($modSettings['topbottomEnable']) ? $context['menu_separator'] . ' &nbsp;&nbsp;<a href="#top"><b>' . $txt['topbottom4'] . '</b></a>' : '', '</td>
      <td align="right" style="padding-right: 1ex;">
         <table cellpadding="0" cellspacing="0">
            <tr>
               ', template_button_strip($normal_buttons, 'top', true), '
            </tr>
         </table>
      </td>
   </tr>
</table>';

   if ($context['show_spellchecking'])
      echo '
<script language="JavaScript" type="text/javascript" src="' . $settings['default_theme_url'] . '/spellcheck.js"></script>';

echo '
<script language="JavaScript" type="text/javascript" src="' . $settings['default_theme_url'] . '/xml_topic.js"></script>
<script language="JavaScript" type="text/javascript"><!-- // --><![CDATA[
   quickReplyCollapsed = ', !empty($options['display_quick_reply']) && $options['display_quick_reply'] == 2 ? 'false' : 'true', ';
   var view_newest_first = ', $options['view_newest_first'], '

   smf_topic = ', $context['current_topic'], ';
   smf_start = ', $context['start'], ';
   smf_show_modify = ', $settings['show_modify'] ? '1' : '0', ';

   // On quick modify, this is what the body will look like.
   var smf_template_body_edit = \'<div id="error_box" style="padding: 4px; color: red;"></div><textarea class="editor" name="message" rows="12" style="width: 94%; margin-bottom: 10px;">%body%</textarea><br /><input type="hidden" name="sc" value="', $context['session_id'], '" /><input type="hidden" name="topic" value="', $context['current_topic'], '" /><input type="hidden" name="msg" value="%msg_id%" /><div style="text-align: center;"><input type="submit" name="post" value="', $txt[10], '" onclick="return modify_save(\\\'' . $context['session_id'] . '\\\');" accesskey="s" />&nbsp;&nbsp;', $context['show_spellchecking'] ? '<input type="button" value="' . $txt['spell_check'] . '" onclick="spellCheck(\\\'quickModForm\\\', \\\'message\\\');" />&nbsp;&nbsp;' : '', '<input type="submit" name="cancel" value="', $txt['modify_cancel'], '" onclick="return modify_cancel();" /></div>\';

   // And this is the replacement for the subject.
   var smf_template_subject_edit = \'<input type="text" name="subject" value="%subject%" size="60" style="width: 99%;"  maxlength="80" />\';

   // Restore the message to this after editing.
   var smf_template_body_normal = \'%body%\';
   var smf_template_subject_normal = \'<a href="', $scripturl, '?topic=', $context['current_topic'], '.msg%msg_id%#msg%msg_id%">%subject%</a>\';
   var smf_template_top_subject = "', $txt[118], ': %subject% &nbsp;(', $txt[641], ' ', $context['num_views'], ' ', $txt[642], ')"

   if (window.XMLHttpRequest)
      showModifyButtons();
// ]]></script>
<table border="0" width="100%" cellpadding="0" cellspacing="0" style="margin-bottom: 1ex;">
      <tr>';
   if ($settings['linktree_inline'])
         echo '
            <td valign="top">', theme_linktree(), '</td> ';
   echo '
            <td valign="top" align="', !$context['right_to_left'] ? 'right' : 'left', '" class="nav"> ', $context['previous_next'], '</td>
      </tr>
</table>';

   $mod_buttons = array(
      'move' => array('test' => 'can_move', 'text' => 132, 'image' => 'admin_move.gif', 'lang' => true, 'url' => $scripturl . '?action=movetopic;topic=' . $context['current_topic'] . '.0'),
      'delete' => array('test' => 'can_delete', 'text' => 63, 'image' => 'admin_rem.gif', 'lang' => true, 'custom' => 'onclick="return confirm(\'' . $txt[162] . '\');"', 'url' => $scripturl . '?action=removetopic2;topic=' . $context['current_topic'] . '.0;sesc=' . $context['session_id']),
      'lock' => array('test' => 'can_lock', 'text' => empty($context['is_locked']) ? 'smf279' : 'smf280', 'image' => 'admin_lock.gif', 'lang' => true, 'url' => $scripturl . '?action=lock;topic=' . $context['current_topic'] . '.' . $context['start'] . ';sesc=' . $context['session_id']),
      'sticky' => array('test' => 'can_sticky', 'text' => empty($context['is_sticky']) ? 'smf277' : 'smf278', 'image' =

ascaland

You need to tell me where you actually want this button.

PLAYBOY

Right next to "Report to Moderators" on each message would be good.

What will this button share exactly ? the message link? Topic link? forum link?
With who this button share the link? everybody on the persons gmail adress book with emails? or everybody on the gtalk?

EnricoR

If I implement this button, will user data be sent to Google? (We have quite strict privacy rules here, and I place value on privacy myself either.)

vbgamer45

Yes it requires a google account to track the user to see if they plused one or not.
Community Suite for SMF - Take your forum to the next level built for SMF, Gallery,Store,Classifieds,Downloads,more!

SMFHacks.com -  Paid Modifications for SMF

Mods:
EzPortal - Portal System for SMF
SMF Gallery Pro
SMF Store SMF Classifieds Ad Seller Pro

ascaland

Quote from: PLAYBOY on June 09, 2011, 07:06:20 PM
What will this button share exactly ? the message link? Topic link? forum link?
With who this button share the link? everybody on the persons gmail adress book with emails? or everybody on the gtalk?

Those can be found in the button reference and/or the video I linked to.
As for the edits:
Code (Above) Select
// Maybe they want to report this post to the moderator(s)?
Code (Add) Select
echo '<div id="plusone_MYFORUMNAME"></div>';
Code (Below) Select
<hr class="post_separator" />
Code (Add) Select
<script type="text/javascript">
gapi.plusone.render("plusone_msg_' . $message['id'] . '", {"size": "standard", "count": "true", "href" : "' . $message['href'] . '"});
</script>

Advertisement: