0 Пользователей и 1 Гость просматривают эту тему.
  • 9 Ответов
  • 4448 Просмотров
*

miscwrk

  • Осваиваюсь на форуме
  • 82
  • 0 / 0
Здравствуйте!

Пытаюсь сделать раздел сайта на основе SP Portfolio. Модуль создает динамичный каталог на основании стандартных категорий Joomla и материалов в них.

В общем очень удобное решение если бы не одно но.

Материалы можно отсортировать по категории, и модуль создает на них (на категории) ссылки, но если категория написана русскими буквами, то вместо русских букв подставляется знак "-", соответственно если есть две категории с одинаковым количеством букв - то модуль воспринимает это как одно и тоже.

В прикрепленных файлах пример.

Подскажите пожалуйста, как это исправить? Можно ли где-то, где формируется ссылка, например вставить id категории?
Я полагаю это все формируется в этом файле, но где именно не хватает мозгов понять.

Код
<?php
/*
# SP Portfolio - Simple Portfolio module by JoomShaper.com
# -------------------------------------------------------------
# Author    JoomShaper http://www.joomshaper.com
# Copyright (C) 2010 - 2013 JoomShaper.com. All Rights Reserved.
# @license - GNU/GPL V2 or Later
# Websites: http://www.joomshaper.com
*/

// no direct access
defined('_JEXEC') or die('Restricted access');

require_once JPATH_SITE.'/components/com_content/helpers/route.php';
jimport( 'joomla.plugin.helper' );
jimport( 'joomla.application.categories' );
JModelLegacy::addIncludePath(JPATH_SITE.'/components/com_content/models', 'ContentModel');

abstract class modSPPortfolioJHelper
{

private $_items = null;

    private $_parent = null;

public static function getList($params, $start, $limit){

$app = JFactory::getApplication();
$db = JFactory::getDbo();

//Parameters
$catids = self::categories($params->get('catid'));

//Get an instance of the generic articles model
$model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));

//Set application parameters in model
$appParams = $app->getParams();
$model->setState('params', $appParams);

// Set the filters based on the module params
$model->setState('list.start', $start);
$model->setState('list.limit', $limit);
$model->setState('filter.published', 1);

// Access filter
$access = !JComponentHelper::getParams('com_content')->get('show_noauth');
$authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id'));
$model->setState('filter.access', $access);

// Category filter
$model->setState('filter.category_id', $catids);

// Filter by language
$model->setState('filter.language', $app->getLanguageFilter());

//  Featured switch
switch ($params->get('show_featured'))
{
case '1':
$model->setState('filter.featured', 'only');
break;
case '0':
$model->setState('filter.featured', 'hide');
break;
default:
$model->setState('filter.featured', 'show');
break;
}

// Set ordering
$orderby = $params->get('orderby', 'a.ordering');
$ordering = $params->get('ordering', 'DESC');

$model->setState('list.ordering', $orderby);
$model->setState('list.direction', $ordering);

$items = $model->getItems();

foreach ($items as &$item) {

$item->slug = $item->id.':'.$item->alias;
$item->catslug = $item->catid.':'.$item->category_alias;
$item->tag = $item->category_title;
$item->image = JURI::base(). self::getImage($item->introtext,$item->images);
$image_full = JURI::base(). self::getFullImage($item->introtext,$item->images);
$item->image_full = ($image_full)? $image_full : $item->image;
$item->title = htmlspecialchars($item->title);
$item->urls = json_decode($item->urls);
$item->introtext = JHtml::_('content.prepare', $item->introtext);
$nonsefurl = ContentHelperRoute::getArticleRoute($item->slug, $item->catslug);
$nonsefurl = preg_replace('/Itemid=(.+)/', 'Itemid=0', $nonsefurl );
$item->link = JRoute::_($nonsefurl);
}
return $items;

}


public static function getTotal($params){


$app = JFactory::getApplication();
$db = JFactory::getDbo();

//Parameters
$catids = self::categories($params->get('catid'));

//Get an instance of the generic articles model
$model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));

//Set application parameters in model
$appParams = $app->getParams();
$model->setState('params', $appParams);

// Set the filters based on the module params
$model->setState('filter.published', 1);

// Access filter
$access = !JComponentHelper::getParams('com_content')->get('show_noauth');
$authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id'));
$model->setState('filter.access', $access);

// Category filter
$model->setState('filter.category_id', $catids);

// Filter by language
$model->setState('filter.language', $app->getLanguageFilter());

//  Featured switch
switch ($params->get('show_featured'))
{
case '1':
$model->setState('filter.featured', 'only');
break;
case '0':
$model->setState('filter.featured', 'hide');
break;
default:
$model->setState('filter.featured', 'show');
break;
}

$items = $model->getItems();

return count($items);
}


//Get categories
public static function categories($parent){
$db = JFactory::getDBO();
$query = "SELECT id FROM #__categories WHERE `parent_id`='" . $parent. "' AND `published`='1'";
$db->setQuery($query);
$catids = $db->loadColumn();
return $catids;
}

//All Categories
public static function getCategories($parent){
$categories = JCategories::getInstance('Content');
        $parent = $categories->get($parent);
        if(is_object($parent))
            $_items = $parent->getChildren(false);
        else
            $_items = false;

        return self::loadCats($_items);
}

//Load list categories
private static function loadCats($cats = array())
    {

        if(is_array($cats))
        {
            $i = 0;
            $return = array();
            foreach($cats as $JCatNode)
            {
                $return[$i] = $JCatNode->title;
                $i++;
            }

            return $return;
        }

        return false;
    }

//Create slug from title
public static function slug($text) {
return preg_replace('/[^a-z0-9_]/i','-', strtolower(trim($text)));
}

//Retrive image
private static function getImage($text, $image_src="") {
$image_src = json_decode($image_src);
if (JVERSION>=2.5 && @$image_src->image_intro) {
return $image_src->image_intro;
} else {
preg_match('/< *img[^>]*src *= *["\']?([^"\']*)/i', $text, $matches);
if (isset($matches[1])) {
return $matches[1];
}
}
}

//Retrive image
private static function getFullImage($text, $image_src="") {
$image_src = json_decode($image_src);

if (JVERSION>=2.5 && @$image_src->image_fulltext) {
return $image_src->image_fulltext;
} else {
preg_match('/< *img[^>]*src *= *["\']?([^"\']*)/i', $text, $matches);
if (isset($matches[1])) {
return $matches[1];
}
}
return null;
}

}
*

miscwrk

  • Осваиваюсь на форуме
  • 82
  • 0 / 0
В общем проблема вот в этом месте :)

Код
	public static function slug($text) {
return preg_replace('/[^a-z0-9_]/i','-', strtolower(trim($text)));
}

функция preg_replace не дружит с utf-8. Кто нибудь может подсказать как здесь правильно написать, чтобы "это" понимало русские буквы?
*

bobalex

  • Захожу иногда
  • 12
  • 2 / 0
public static function slug($text) {
      return preg_replace('/[^\w]/u','-', strtolower(trim($text)));
   }
так должно работать.
*

miscwrk

  • Осваиваюсь на форуме
  • 82
  • 0 / 0
спасибо за участие, но не работает, вообще не формирует никаких символов.
там проблема какая-то очень глубокая насколько я понял, порывшись вчера на форумах, связанная с самим PHP

можно как-то попробовать переделать это с помощью iconv или с помощью mbчтототам :) у меня знаний не хватает на это
*

Hishchnik

  • Давно я тут
  • 254
  • 19 / 1
  • ©
preg_replace('/[^a-z0-9_]/i','-', strtolower(trim($text)));
разберем?

функция preg_replace ищет в тексте: strtolower(trim($text))
символы, цифры: "/[^a-z0-9_]/i"
и заменяет на "-----"
вопрос в том, нужно ли вам вообще это?
попробуйте так функцию оформить:
Код: php
public static function slug($text) {
      return $text;
   }
что выдает?

а лучше либо по алиасам вести фильтр, либо конвертировать текст в транслит что одно и тоже(алиас)
« Последнее редактирование: 20.05.2014, 23:24:31 от Hishchnik »
1. Помог? Благодарность выражается кнопочкой "+" ;)
2. Остановите землю я сойду!
3.
*

miscwrk

  • Осваиваюсь на форуме
  • 82
  • 0 / 0
вопрос в том, нужно ли вам вообще это?
попробуйте так функцию оформить:

Огромное спасибо! Это то, что нужно!
Теперь выводит по названию category title и без проблем всё работает.
По альясам я пытался подправить код, согласен, что это было бы умнее, но тоже не справился, такое решение как получилось устраивает на 100%.
*

samayut

  • Новичок
  • 1
  • 0 / 0
Подскажите, как вы сделали название в меню "Все"? Переименовали я полагаю с английского как то
*

marmax

  • Захожу иногда
  • 18
  • 0 / 0
Ребят подскажите пожалуйста как перевести в этом же модуле "MORE" и "Show all"
буду очень благодарен
*

motokraft

  • Живу я здесь
  • 1338
  • 72 / 13
Ребят подскажите пожалуйста как перевести в этом же модуле "MORE" и "Show all"
буду очень благодарен

Думаю что тебе это поможет...
http://joomlaforum.ru/index.php/topic,315045.msg1566374.html#msg1566374
...
*

yts2008

  • Новичок
  • 2
  • 0 / 0
Ребята, подскажите пожалуйста, как добиться, чтобы в модуле SP Portfolio не пропадали линки на страницы в русской версии. В англ все линки работают, а вот в русской - ошибка 404. Где -то может код подрулить. Сайт Helix3 настроен на два языка и везде работает нормально, только вот проблема с Портфолио.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

компонент Simple portfolio

Автор Evert

Ответов: 1
Просмотров: 704
Последний ответ 22.04.2017, 23:12:46
от Evert
SP Portfolio Show all -> Все

Автор Rabbit13245

Ответов: 3
Просмотров: 2275
Последний ответ 05.05.2016, 14:48:41
от klenov29
Не кликабельны новости в модуле SP Portfolio после загрузки "Load More"

Автор tehfoxen

Ответов: 2
Просмотров: 453
Последний ответ 25.09.2015, 09:02:40
от tehfoxen
Как в SP Portfolio изменить дефолтную категорию?

Автор Jack Walter Smith

Ответов: 1
Просмотров: 773
Последний ответ 12.03.2015, 01:01:58
от Jack Walter Smith
mod_news_pro_gk4 научить генерировать Thumbnails с дригого домена на другом сервере.

Автор Yura Vakulenko

Ответов: 2
Просмотров: 1702
Последний ответ 08.12.2011, 23:44:39
от Yura Vakulenko