/** * Get the item * * @param int $item_id id of the item to be loaded * @param bool $prepare_content apply content plugins to item body and intro * * @return object */ public function getItem($item_id = null, $prepare_content = true) { if (isset($this->item)) { return $this->item; } // helpers $db = $this->_db; $imageHelper = new JKitHelperImage(JComponentHelper::getParams('com_jkit')); // determine item id $id = $item_id ? $item_id : JRequest::getInt('id'); // get the item $query_item = $db->getQuery(true)->select('a.*')->from('#__jkit_items AS a')->where("a.id = {$id}")->where('a.state = 1'); $query_item->select('c.title AS category')->leftJoin('#__categories AS c ON c.id = a.catid'); $query_item->select('u.title AS user, u.alias AS user_alias')->leftJoin('#__jkit_users AS u ON u.id = a.user_id'); $this->item = $db->setQuery($query_item)->loadObject(); // check item if (!$this->item) { if (!$item_id) { // component view throw new Exception(JText::_('COM_JKIT_ERROR_ITEM_NOT_FOUND'), 404); } else { // item loaded by a module return null; } } // set item params and image $this->item->params = $this->item ? json_decode($this->item->params) : array(); $this->item->image = $imageHelper->getImage($id, 'items'); // get the item images $query_images = $db->getQuery(true)->select('*')->from('#__jkit_images')->where("item_id = {$id}")->where('state = 1')->order('ordering'); $images = $db->setQuery($query_images)->loadObjectList(); foreach ($images as $image) { $image->params = json_decode($image->params); if (isset($image->params->tags)) { $image->params->tags = array_keys(get_object_vars($image->params->tags)); } } $this->item->images = $images; // get the item tags $query_tags = $db->getQuery(true)->select('a.id, a.title, a.alias')->from('#__jkit_tags AS a')->innerJoin('#__jkit_tags_item AS t ON t.tag_id = a.id')->where("a.state = 1")->where("t.item_id = {$id}")->order('a.id'); $this->item->tags = $db->setQuery($query_tags)->loadObjectList(); // get item translation $lang = $db->quote(JFactory::getLanguage()->getTag()); $query_translation = $db->getQuery(true)->select('*')->from('#__jkit_translations')->where("ref_table = 'items'")->where("lang = {$lang}")->where("ref_id = {$id}"); $translation = $db->setQuery($query_translation)->loadObject(); if ($translation) { $this->item = JKit::applyTranslation($this->item, $translation); } // get tags translations $tags_ids = array(); $tags_translations = array(); foreach ($this->item->tags as $tag) { $tags_ids[] = $tag->id; } if ($tags_ids) { $query_tags_translations = $db->getQuery(true)->select('*')->from('#__jkit_translations')->where("ref_table = 'tags'")->where("lang = {$lang}")->where("ref_id IN (" . implode(',', $tags_ids) . ")"); $tags_translations = $db->setQuery($query_tags_translations)->loadObjectList(); } if ($tags_translations) { foreach ($this->item->tags as $i => $tag) { foreach ($tags_translations as $tag_translation) { if ($tag->id == $tag_translation->ref_id) { $this->item->tags[$i]->title = $tag_translation->title; $this->item->tags[$i]->alias = $tag_translation->alias; } } } } // prepare content if ($prepare_content) { $this->item->intro = JHtml::_('content.prepare', $this->item->intro); $this->item->body = JHtml::_('content.prepare', $this->item->body); } return $this->item; }
?> <h1 class="uk-heading-large"><?php echo $this->data->title . $subheading; ?> </h1> <?php } ?> <!-- controls --> <?php if ($this->item->tags) { ?> <ul id="jkit-gallery-controls" class="uk-subnav uk-subnav-pill uk-margin"> <li class="uk-active" data-uk-filter=""><a href="#"><?php echo JKit::text('all'); ?> </a></li> <?php foreach ($this->item->tags as $tag) { ?> <li data-uk-filter="tag-<?php echo $tag->id; ?> "><a href="#"><?php echo $tag->title; ?> </a></li> <?php } ?>
<h3><a href="<?php echo $link; ?> "><?php echo $item->title; ?> </a></h3> <p> <?php echo $item->info; ?> <br><a class="uk-button uk-button-mini uk-margin-small" href="<?php echo $link; ?> "><?php echo JKit::text('readmore'); ?> <i class="uk-icon-angle-right"></i></a> </p> </div> </li> <?php } ?> </ul> </div> <div class="uk-flex uk-flex-center uk-margin">
?> </p> <?php } ?> <?php if ($item->tags) { ?> <hr class="uk-article-divider"> <div class="jkit-post-tags"> <p> <?php echo JKit::text('tagged'); ?> : <?php foreach ($item->tags as $tag) { ?> <a class="jkit-item-tag" href="<?php echo JRoute::_('index.php?option=com_jkit&view=items&tag=' . $tag->alias); ?> "><?php echo $tag->title; ?> </a> <?php } ?>
/** * Search for translations and override items strings * * @param array $items * * @return array */ private function loadTranslations($items) { // get translations lang $lang = $this->_db->quote(JFactory::getLanguage()->getTag()); // get items translations $qids = implode(',', $this->items_ids); $query = $this->_db->getQuery(true)->select('*')->from('#__jkit_translations')->where("ref_table = 'items'")->where("lang = {$lang}"); $query->where("ref_id IN ({$qids})"); $translations = $this->_db->setQuery($query)->loadObjectList(); // get tags translations $translations_tags = array(); if ($this->tags_ids) { $tids = implode(',', $this->tags_ids); $query_tags = $this->_db->getQuery(true)->select('*')->from('#__jkit_translations')->where("ref_table = 'tags'")->where("lang = {$lang}"); $query_tags->where("ref_id IN ({$tids})"); $translations_tags = $this->_db->setQuery($query_tags)->loadObjectList(); } // check there are translations to apply if (!$translations && !$translations_tags) { return $items; } // apply translations foreach ($items as $item) { // apply items translations foreach ($translations as $translation) { if ($item->id == $translation->ref_id) { $item = JKit::applyTranslation($item, $translation); } } // apply tags translations foreach ($translations_tags as $translation) { foreach ($item->tags as $tag) { if ($tag->id == $translation->ref_id) { $tag->title = $translation->title; $tag->alias = $translation->alias; } } // reorder item tags usort($item->tags, array('JKitModelItems', 'reorderTranslatedTags')); } } // assign tags translation // TODO: merge in the first loop, no need for 2 loops if (!$this->tags || !$translations_tags) { return $items; } foreach ($this->tags as $tag) { foreach ($translations_tags as $translation) { if ($tag->id == $translation->ref_id) { $tag->title = $translation->title; $tag->alias = $translation->alias; } } } // reorder translation tags usort($this->tags, array('JKitModelItems', 'reorderTranslatedTags')); return $items; }