Форум русской поддержки Joomla!® CMS
08.12.2016, 18:17:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

SP Portfolio - как научить русскому языку?

 (Прочитано 3351 раз)
0 Пользователей и 1 Гость смотрят эту тему.
miscwrk
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 82


« : 19.05.2014, 15:35:48 »

Здравствуйте!

Пытаюсь сделать раздел сайта на основе 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;
}

}


* sp_ok.jpg (74.33 Кб, 980x450 - просмотрено 357 раз.)

* sp_not_ok.jpg (73.35 Кб, 984x447 - просмотрено 253 раз.)
Записан
miscwrk
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 82


« Ответ #1 : 19.05.2014, 16:51:20 »

В общем проблема вот в этом месте Azn

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

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

Репутация: +2/-0
Offline Offline

Сообщений: 12


« Ответ #2 : 20.05.2014, 10:13:45 »

public static function slug($text) {
      return preg_replace('/[^\w]/u','-', strtolower(trim($text)));
   }
так должно работать.
Записан
miscwrk
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 82


« Ответ #3 : 20.05.2014, 15:19:41 »

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

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

Репутация: +19/-1
Offline Offline

Пол: Мужской
Сообщений: 255


©


« Ответ #4 : 20.05.2014, 18:13:00 »

preg_replace('/[^a-z0-9_]/i','-', strtolower(trim($text)));
разберем?

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

а лучше либо по алиасам вести фильтр, либо конвертировать текст в транслит что одно и тоже(алиас)
« Последнее редактирование: 20.05.2014, 23:24:31 от Hishchnik » Записан
miscwrk
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 82


« Ответ #5 : 20.05.2014, 22:16:34 »

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

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

Репутация: +0/-0
Offline Offline

Сообщений: 1


« Ответ #6 : 13.10.2014, 12:28:19 »

Подскажите, как вы сделали название в меню "Все"? Переименовали я полагаю с английского как то
Записан
marmax
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 18


« Ответ #7 : 21.06.2015, 19:01:18 »

Ребят подскажите пожалуйста как перевести в этом же модуле "MORE" и "Show all"
буду очень благодарен
Записан
motokraft
Живу я здесь
******

Репутация: +72/-13
Offline Offline

Сообщений: 1436


« Ответ #8 : 21.06.2015, 21:18:18 »

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

Думаю что тебе это поможет...
http://joomlaforum.ru/index.php/topic,315045.msg1566374.html#msg1566374
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet