+22.15
Рейтинг
88.90
Сила
  • avatar PSNet
  • 1
1. проверка
if (class_exists('PluginOne')) {

}

означает что плагин one активирован т.к. главный класс существует. Но это не очень красиво. Просто, быстро, эффективно, но «не в духе лс».

2. код:
    $plugins = $this->Plugin_GetActivePlugins();
    if (in_array('one', $plugins)) {
        ...;
    }

делает тоже самое, но читает xml файлы каждого плагина, получает всю информацию о них (автора, описание и т.п.). В духе лс, но в данной ситуации получает много лишней информации. Долго, затратно по ресурсам.

3. код:
$plugins = Engine::getInstance()->GetPlugins();
if(isset($plugins['one'])){
    ...;
}

возвращает только коды активных плагинов. В духе лс, просто, быстро и без обращения к фс (без чтения xml файлов). Данный список уже содержится в ядре и поэтому ресурсы не тратятся.

Для вашей простой проверки подойдет 1 или 3 вариант. Оба быстрые и рабочие, но последний более красив и логичен для движка.
  • avatar PSNet
  • 3
в шаблоне топика
class="{if $oUserCurrent and $oTopic and $oUserCurrent->getId()==$oTopic->getUser()->getId()}my-class{/if}"
  • avatar ort
  • 0
В новой версии LS 2.0 появится возможность возвращать из хука массив, будет как то так:
{hook run='header_banner_begin' assign='aResult' array=true}
  • avatar PSNet
  • 0
Ожидаю, что в $aResult окажется «ассоциативный» массив, т.е. {$aResult.foo} вернет «bar». Но в результате возвращается массив вида array(0=>'A', 1=>'r', 1=>'r', 1=>'a', 1=>'y', 1=>'(' и так далее.
Хук возвращает строку. В пхп 5.4 вы бы увидели нотис из-за этого.

Помогите, пожалуйста, как корректно передать массив из хука в шаблон?
Зависит от задачи:

1. Сделать просто добавление переменной в шаблон:
$this->Viewer_Assign('VarName', $mData);

и в шаблоне доступно $VarName

или

2. Создать локальную копию вьюера, в неё передать все переменные, обработать шаблон и вернуть хтмл представление для вставки в месте хука:
$oViewer = $this->Viewer_GetLocalViewer();
$oViewer->Assign('mVar', $mVar);
return $oViewer->Fetch(Plugin::GetTemplatePath(__CLASS__) . 'folder/file.tpl');

и на месте хука будет добавлен хтмл код шаблона folder/file.tpl папки шаблонов плагина
\www\templates\skin\__SKIN__\actions\ActionPhotoset\add.tpl

Закоментировать
<script type="text/javascript">
	jQuery(function($){
		if (jQuery.browser.flash) {
			ls.photoset.initSwfUpload({
				post_params: { 'topic_id': {json var=$_aRequest.topic_id} }
			});
		}
	});
</script>
  • avatar PSNet
  • 1
Не нужны никакие словари, только намучаетесь с ними. Используйте сравнение схожести строк на основе анализа звучания:

www.php.net/manual/en/function.soundex.php
www.php.net/manual/ru/function.metaphone.php
www.php.net/manual/ru/function.similar-text.php

Ну или прямо в мускул:

dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex
{if $oUserCurrent}
	{$aLang.settings_invite_available}: {if $oUserCurrent->isAdministrator()}{$aLang.settings_invite_many}{else}{$iCountInviteAvailable}{/if}
{/if}


\classes\hooks\HookCountInvite.class.php
<?php
//===============================================================
class HookCountInvite extends Hook{
//===============================================================
	public function RegisterHook(){
		$this->AddHook('init_action','InitAction',__CLASS__,1000);
	}
//===============================================================
	public function InitAction(){
		if($oUserCurrent=$this->User_GetUserCurrent()){
			$this->Viewer_Assign('iCountInviteAvailable',$this->User_GetCountInviteAvailable($oUserCurrent));
		}
	}
//===============================================================
}
?>
  • avatar ort
  • 5
Судя по комментариям у многих нет четкого понимания, что это и как это.
Функционал аналогичен текущему на внутренних проектах LS, а именно:
  • Авторизация работает между LS сайтами одного владельца
  • У каждого сайта своя БД
  • Создается дополнительный сайт — passport, со своей единой БД пользователей
  • Регистрация/авторизация происходит исключительно на passport, далее редирект на нужный сайт
  • При регистрации создается аккаунт в единой БД и при первом заходе на другой сайт происходит автоматическая регистрация аккаунта на этом сайте
  • Далее при повторной авторизации на passport происходит автоматическая авторизация на всех сайтах, где есть аккаунт
  • Логины и емайлы на всех сайтах будут совпадать
  • Идеальный вариант — запуск всех сайтов сразу с passport'ом
  • Объединение в одну авторизацию уже действующих разных сайтов влечет за собой процесс объединения БД. Этот процесс не тривиальный и в большинстве случаев потребует ручной работы.
Как вариант:

Бесплатный плагин «TOP пользователей»

в файле classes/blocks/BlockUsertop.class.php изменяем
$sOrder='user_rating';
меняем на
$sOrder='user_date_register';


в файле config/config.php настраиваем
$config['user_count']='5';	// Количество пользователей в блоке
Спасибо!

Не пишите вызовы класса Config в конфиге (как в вашем примере)

С какого-то плагина было взято, как пример.

Можно, это обычный пхп файл, на лучше избегать сложных конструкций (это все таки настройка, а не код).
Но ещё смотря какое значение вы будет сравнивать...

Все без сложных конструкций и в одном конфиге. Я уже и не помню зачем мне это надо было, помню вопрос такой был. Хотя… Можно даже и к этому плагину применить:

$config['my_url'] = 'main';
$config['main_page'] = 'true';


$config['$root$']['router']['page'][$config['my_url']] = 'PluginMainpage_ActionPromopage';

if ($config['main_page'] == 'true') {
	$config['$root$']['router']['config']['action_default'] = $config['my_url'];
}

В общем, спасибо еще раз!
\classes\hooks\HookStat.class.php
<?php
//===============================================================
class HookStat extends Hook{
//===============================================================
	public function RegisterHook(){
		$this->AddHook('init_action','InitAction',__CLASS__,1000);
	}
//===============================================================
	public function InitAction(){
		$this->Viewer_Assign('aStat',$this->User_GetStatUsers());
	}
//===============================================================
}
?>
  • avatar PSNet
  • 0
{if in_array($sAction, Config::Get('plugin.wmessage.blabla')}
  test
{/if}

используйте Config::Get вместо cfg и переменной oConfig
Есть такая очень крутая штука как микроразметка help.yandex.ru/webmaster/schema-org/what-is-schema-org.xml

Было бы еще круче совместить микроразметку с определенными «полями». Скажем название продукта, цена, описание, ш*д*в… многое для всех подходит.

Поисковики очень любят хорошо размеченные карточки товаров.

Планируется ли внедрение микроразметки?
\www\classes\modules\topic\Topic.class.php

строка 722
$aFilter['order']=array('t.topic_rating desc','t.topic_id desc');
заменить на
$aFilter['order']=array('t.topic_count_vote_up desc','t.topic_id desc');
  • avatar AlikMis
  • 3
\www\classes\modules\topic\Topic.class.php

public function GetTopicsNew

замените фильтр на
$aFilter=array(
			'blog_type' => array(
				'personal',
				'open',
			),
			'topic_publish' => 1,
			'topic_new' => $sDate,
			'topic_rating'=>array(
				'value' => Config::Get('module.blog.index_good'),
				'type'  => 'down',
			);
		);

Для отображения в новых только новых с рейтингом ниже порога главной
Делал так, не работает:

$config["topic"]["*"]["-"]["title"]["value"] = "нужная вэлью";
$config["topic"]["*"]["-"]["title"]["show_tags"] = false;
$config["topic"]["*"]["-"]["title"]["show_blogs"] = false;
В файле /framework/frontend/framework/js/vendor/parsley/parsley.js
после 103 строки добавил
case 'translit':
            regExp = /^[a-z0-9-_]+$/;

в файле /application/frontend/skin/developer/actions/ActionBlog/add.tpl
в строке 43 поменял тип alphanum на translit
sFieldRules      = 'required="true" type="translit" rangelength="[2,50]"'
  • avatar leginnn
  • 3
{if $oTopic->getPreviewImageWebPath('100crop')}
              <img src="{$oTopic->getPreviewImageWebPath('100crop')}" alt="{$oTopic->getTitle()|escape:'html'}" />
            {else}
              <img src="{cfg name='path.root.web'}/uploads/banners/100.png"  alt="{$oTopic->getTitle()|escape:'html'}" />
            {/if}
  • avatar vOFFka
  • 2
{if $oTopic->getPreviewImageWebPath()}
    <a href="{$oTopic->getUrl()}"><img class="topic_preview" src="{$oTopic->getPreviewImageWebPath(300crop)}"></a>
{else}
    <a href="{$oTopic->getUrl()}"><img class="topic_preview" src="{cfg name="path.static.skin"}/images/default.gif"></a>
{/if}


где default.gif — дефолтное изображение в папке images шаблона.
  • avatar Lego1
  • 0
А
{$oTopic->getSource()}
все показывает как надо… можно попробовать продебажить весь $_aRequest —
<pre>{$_aRequest|print_r}</pre>