Kunena 7.0.8 Released

The Kunena team has announce the arrival of Kunena 7.0.8 [K 7.0.8] in stable which is now available for download as a native Joomla extension for J! 5.4.x/6.0.x./6.1.x. This version addresses most of the issues that were discovered in K 6.2 / K 6.3 / K 6.4 and issues discovered during the last development stages of K 7.0

Topics that are moved into this category are generally considered to be closed. Users may want to add additional information but these topics should not be resurrected in order to discuss new problems or unrelated matters.

Question Writing Kunena extension

More
16 years 1 week ago #59416 by Hektorrr
Hi,
I want to write extension/plugin to display user articles in Kunena profile (this will be 1st step to Kunnenity my site ;) )
I thing that we need to do three basic things (but on 95% i made mistake ):
1.
edit components/com_kunena/template/default/profile/usertab.php
and after:

<?php endif; ?>
<dt class="open"><?php echo JText::_('COM_KUNENA_USERPOSTS'); ?></dt>
<dd style="display: none;">
<?php $this->displayUserPosts(); ?>
</dd>

add for example

<dt class="open"><?php echo JText::_('COM_KUNENA_USERARTICLES'); ?></dt>
<dd style="display: none;">
<?php $this->displayArticles(); ?>
</dd>

This modification will add one Tab "COM_KUNENA_USERARTICLES" (in com_kunena/language/en_GB we can change it) in our Kunena profile.
2.
We must edit: components/com_kunena/func/profile.php
and add after:

function displayUserPosts()
{
require_once (KUNENA_PATH_FUNCS . DS . 'latestx.php');
$obj = new CKunenaLatestX('userposts', 0);
$obj->user = $this->user;
$obj->embedded = 1;
$obj->getUserPosts();
$obj->displayPosts();
//echo $obj->getPagination ( $obj->func, $obj->show_list_time, $obj->page, $obj->totalpages, 3 );
}

I thing somethink like this:

function displayArticles()
{
require_once (KUNENA_PATH_LIB . DS . 'articles.php');
$review = new CKunenaArticles();
$obj->embedded = 1;
$review->display();
}

Im not sure that step at all...
3.
We must add file articles.php in components/com_kunena/lib


In articles.php we should put right code to display joomla articles. In CB profile this script looks like that:

<?php
/**
* Author Tab Class for handling the CB tab api
* @version $Id: cb.authortab.php 831 2010-01-26 11:04:24Z beat $
* @package Community Builder
* @subpackage cb.authortab.php
* @author JoomlaJoe
* @copyright (C) JoomlaJoe and Beat, www.joomlapolis.com
* @license www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2
*/

// ensure this file is being included by a parent file
if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }


class getAuthorTab extends cbTabHandler {

function getAuthorTab() {
$this->cbTabHandler();
}

function getDisplayTab($tab,$user,$ui) {
global $_CB_framework, $_CB_database, $mainframe;

$jVer = checkJversion();

$showHits = $_CB_framework->getCfg( 'hits' );
$showRating = $_CB_framework->getCfg( 'vote' );

$return = '';

$now = date( 'Y-m-d H:i:s', $_CB_framework->now() + $_CB_framework->getCfg( 'offset' ) * 60 * 60 );
$query = "SELECT a.id, a.catid, a.title, a.hits,a.created, ROUND( r.rating_sum / r.rating_count ) AS rating,r.rating_count";
if ( $jVer == 1 ) {
$query .= ', CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(\':\', a.id, a.alias) ELSE a.id END as slug,'
. ' CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END as catslug';
}
$query .= "\n FROM #__content AS a"
. "\n LEFT JOIN #__content_rating AS r ON r.content_id=a.id"
. "\n INNER JOIN #__sections AS s ON s.id=a.sectionid AND s.title != 'Mamblog'"
;
if ( $jVer == 1 ) {
$query .= "\n LEFT JOIN #__categories AS cc ON cc.id = a.catid";
}
$query .= "\n WHERE a.created_by=". (int) $user->id .""
. "\n AND a.state = 1 "
. "\n AND (publish_up = '0000-00-00 00:00:00' OR publish_up <= '$now')"
. "\n AND (publish_down = '0000-00-00 00:00:00' OR publish_down >= '$now')"
. "\n AND a.access <= " . (int) $_CB_framework->myCmsGid()
. "\n ORDER BY a.created DESC"
;
$_CB_database->setQuery( $query );
//print $_CB_database->getQuery();
$items = $_CB_database->loadObjectList();
if(!count($items)>0) {
$return .= "<br /><br /><div class=\"cbNoArticles\" style=\"text-align:left;width:95%;\">";
$return .= _UE_NOARTICLES;
$return .= "</div>";
return $return;
}

$return .= $this->_writeTabDescription( $tab, $user );

$return .= "<table cellpadding=\"5\" cellspacing=\"0\" border=\"0\" width=\"95%\">";
$return .= "<tr class=\"sectiontableheader\">";
$return .= "<th>"._UE_ARTICLEDATE."</th>";
$return .= "<th>"._UE_ARTICLETITLE."</th>";
if( $showHits ) $return .= "<th>"._UE_ARTICLEHITS."</th>";
if( $showRating ) $return .= "<th>"._UE_ARTICLERATING."</th>";
$return .= "</tr>";
$i=1;
$hits="";
$rating="";
foreach($items AS $item) {
if ( isset( $mainframe ) && is_callable( array( $mainframe, "getItemid" ) ) ) {
$itemid = $mainframe->getItemid( $item->id );
} elseif (is_callable( "JApplicationHelper::getItemid" ) ) {
$itemid = JApplicationHelper::getItemid( $item->id );
} else {
$itemid = null;
}
$itemidtxt = $itemid ? "&amp;Itemid=" . (int) $itemid : "";
$i= ($i==1) ? 2 : 1;
if (is_callable(array("mosAdminMenus","ImageCheck"))) {
$starImageOn = mosAdminMenus::ImageCheck( 'rating_star.png', '/images/M_images/' );
$starImageOff = mosAdminMenus::ImageCheck( 'rating_star_blank.png', '/images/M_images/' );
} else { // Mambo 4.5.0:
$starImageOn = '<img src="'.$_CB_framework->getCfg( 'live_site' ).'/images/M_images/rating_star.png" alt="" align="middle" style="border:0px;" />';
$starImageOff = '<img src="'.$_CB_framework->getCfg( 'live_site' ).'/images/M_images/rating_star_blank.png" alt="" align="middle" style="border:0px;" />';
}
$img="";
if( $showRating ) {
for ($j=0; $j < $item->rating; $j++) {
$img .= $starImageOn;
}
for ($j=$item->rating; $j < 5; $j++) {
$img .= $starImageOff;
}

$rating = '<td><span class="content_rating">';
$rating .= $img . '&nbsp;/&nbsp;';
$rating .= intval( $item->rating_count );
$rating .= "</span></td>\n";
}
if ( $showHits ) {
$hits = "<td>".$item->hits."</td>";
}
if ( $jVer == 1 ) {
$url = cbSef( 'index.php?option=com_content&amp;view=article&amp;id=' . $item->slug . '&amp;catid=' . $item->catslug . $itemidtxt );
} else {
$url = cbSef( 'index.php?option=com_content&amp;task=view&amp;id=' . (int) $item->id . $itemidtxt );
}

$return .= "<tr class=\"sectiontableentry$i\"><td>".cbFormatDate( $item->created )."</td><td><a href=\""
. $url . "\">"
.$item->title."</a></td>".$hits.$rating."</tr>\n";

}
$return .= "</table>";

return $return;
}
} // end class getAuthorTab.
?>


If someone know how and want to finish this please to share your knowledge ;)

Please Log in or Create an account to join the conversation.

More
16 years 6 days ago #59456 by Matias
Replied by Matias on topic Re: Writing Kunena extension
Few points:

1) your tab should be closed (only one can be open)
2) something like that, but you need to modify 3 into the same form as our other classes (or you can just include that php inside template without having any classes).

It doesn't work unmodified, though.. So you do need someone with decent coding skills.

Please Log in or Create an account to join the conversation.

More
16 years 6 days ago #59538 by Hektorrr
Thank You for Your reply :)
This is very good idea to put php code only to template file:)

Today I read a number of courses php, html and mysql. But i dont know how connect with Joomla database as in this CB plugin. And i donno where is definied $_CB_Database and $_CB_Framework so i dont have idea how its work.

Now I almost sure this is meybe 20-30 minutes for good coder...

Please Log in or Create an account to join the conversation.

Time to create page: 0.230 seconds