0.00
Рейтинг
0.31
Сила

Алекс

  • avatar vOFFka
  • 4
{if $sAction == 'index' and $smarty.foreach.MyTopicCycle.iteration == 7}

{/if}
  • avatar Shrike
  • 2
Недавно столкнулся с подобной проблемой. Проект «переехал» с другой CMS.
Поэтому запросы в БД
Пересчет количества в топиках
UPDATE `PREFIX_topic` t  
           SET t.topic_count_comment = (
               SELECT count(c.comment_id)   FROM `PREFIX_comment` c
                    WHERE c.target_id = t.topic_id AND c.comment_publish = 1 
                              AND c.target_type = 'topic')

Пересчет количества в topic_read
UPDATE `PREFIX_topic_read` t  
           SET t.comment_count_last = (
                    SELECT count(c.comment_id)   FROM `PREFIX_comment` c
                    WHERE c.target_id = t.topic_id')
  • avatar Ajaxy
  • 0
*поправка*
LS::CurUsr() => Engine::GetInstance()->User_GetUserCurrent()
LS::Adm() => Engine::GetInstance()->User_GetUserCurrent()->isAdministrator()
  • avatar Ajaxy
  • 1
И еще, чем отличается $this от LS::E()?
Некоторые экшены проксируют вызовы несуществущих методов в вызовы модулей.
Это не совсем очевидно и не масштабируемо, но так сложилось исторически. Я рекомендую всегда использовать полный синтаксис Engine::GetInstance()->Module_Method() или сокращенный алиас LS::Module_Method() (для версий PHP 5.3+, или LS::E()->Module_Method() — для ранних версий PHP)

Кстати, вот другие алиасы:

LS::Ent($sName, $aData) => Engine::GetEntity()
LS::Mpr($sClassName, $sName, $oConnect) => Engine::GetMapper()
LS::CurUsr() => Engine::GetEntity()->User_GetUserCurrent()
LS::Adm() => Engine::GetEntity()->User_GetUserCurrent()->isAdministrator()

В шаблонах аналогичным образом можно использовать инстанцию $LS: {$LS->CurUsr()->getName()}
  • avatar UJey
  • 0
Чтобы все работало корректно надо писать так:

$oTalk = $this->Talk_SendTalk(
	$yourMessageTitle,
	$yourMessageText,
	1, /* admin user ID */
	array($oUser),
	false, /* no notify */
	false /* no blacklist */
);
$this->Talk_DeleteTalkUserByArray($oTalk->getId(), 1 /* admin user ID */);


В этом случае все будет работать как и при предложении дружбы. Т.е. в почтовом ящике пишет от кого письмо, но ответить нельзя. Да и код выглядит приятнее.

Надеюсь будет полезно кому-то.
  • avatar clops
  • 0
Просто многие следуют принципу «что слышу, то пою», а те кто им изначально это напел наверное погоняли какой-нить стандартный ORM Framework против «пустных» запросов и решили «что они все такие». Я сам когда-то сравнивал Doctrine и AdoDB — и да, doctrine в 30 раз медленее AdoDB, но всё равно в пределах тысячных секунды. Это всё статичный оверхед, и с ним можно спокойно жить :)
  • avatar zoltes
  • 1
добавил кнопку на панель в editor.tpl

<a href="#" class="ls-panel-size" onclick="lsPanel.taSize('{$textarea}'); return false;"  title="{$aLang.panel_size}"></a>


а в panel.js
дописал

taSize: function(obj) {
		obj=$(obj);
		var tareasize = obj.getSize();
		if (tareasize.y > 599) {tareasize.y = 0}
		obj.style.height=tareasize.y+200+'px'; 
	},


теперь по нажатию на кнопку поле для текста увеличивается каждый раз на 200 пикселей в высоту, а при достижении 1000 пикселей уменьшается до первоначального
  • avatar trim06
  • 0
classes/actions/ActionRegistration.class.php

Находим
$this->Blog_CreatePersonalBlog($oUser);


И после него вставляем

$oTalk=new TalkEntity_Talk();
					
          $oTalk->setUserId(1);
          $oTalk->setTitle('Поздравляю с регой');
          $sText=$this->Text_Parser('Сообщение, чё там хотите ему сказать...');
          $oTalk->setText($sText);
          $oTalk->setDate(date("Y-m-d H:i:s"));
          $oTalk->setDateLast(date("Y-m-d H:i:s"));
          $oTalk->setUserIp(func_getIp());
          if ($oTalk=$this->Talk_AddTalk($oTalk))
          {
            $iTalk_id = $oTalk->getId();
            $oTalkUser=new TalkEntity_TalkUser();
            $oTalkUser->setTalkId($iTalk_id);
            $oTalkUser->setUserId($oUser->getId());
            $oTalkUser->setDateLast(null);
            $this->Talk_AddTalkUser($oTalkUser);
          }


В идеале конечно лучше проверять включена ли активация по почте и после её проведения отправлять письмо, это же так, чисто пример реализации
Итак. Просидел почти всю ночь. Вот чего я добился:

в SimilarTopics.class.php

class LsSimilarTopics extends Module {
    public function Init() {
    }
    
	public function GetSimilarTopics($oTopic){
		$sTags = $oTopic->getTags();
		$sTitle = $oTopic->getTitle();
		$iNumTags = str_word_count($sTags);
		$iNumTitle = str_word_count($sTitle);
		($iNumTags > 1) ? 2 : $iNumTags;
        $sTitleTags='@topic_tags "'.$oTopic->getTags().'"/'.$iNumTags.' @(topic_title,topic_text) "'.$oTopic->getTitle().'"/'.round($iNumTitle*0.6);
        $aTopics=array();
        if($data=$this->Sphinx_FindSimilarTopics($sTitleTags,Config::Get('module.similartopics.count')+1,array('topic_publish' => 1))){
            foreach($data['matches'] as $k=>$v){
                $obj=$this->Topic_GetTopicById($k);
                if($k!=$oTopic->getId() && isset($obj)) $aTopics[]=$obj;
            }
        }
        return $aTopics;
    }
}


в Sphinx.class.php

public function FindSimilarTopics($sTerms,$iLimit,$aExtraFilters){
		$cacheKey=Config::Get('module.search.entity_prefix')."similartopics_{$sTerms}_{$iLimit}";
		if(false===($data=$this->Cache_Get($cacheKey))){
			$this->oSphinx->SetMatchMode(SPH_MATCH_EXTENDED2);
			$this->oSphinx->SetLimits(0,$iLimit);
			/**
			 * Устанавливаем атрибуты поиска
			 */
			if(!is_null($aExtraFilters)){
				foreach($aExtraFilters AS $sAttribName => $sAttribValue){
					$this->oSphinx->SetFilter(
						$sAttribName, 
						(is_array($sAttribValue)) ? $sAttribValue : array($sAttribValue)
					);
				}
			}
			if(!is_array($data=$this->oSphinx->Query($sTerms,Config::Get('module.search.entity_prefix').'topicsIndex'))) return FALSE;

			# no results = no cache
			if($data['total']>0) $this->Cache_Set($data,$cacheKey,array(),60*15);
		}
		return $data;
	}


Слегка поясню что же я сделал:
1) Ищется теперь только в опубликованных
2) Усложнён запрос, теперь он формулируется так:
$sTitleTags='@topic_tags "'.$oTopic->getTags().'"/'.$iNumTags.' @(topic_title,topic_text) "'.$oTopic->getTitle().'"/'.round($iNumTitle*0.6);

Теперь теги ищются среди тегов, а заголовок в заголовках и текстах, причём совпадения в тегах по двум словам, а в заголовке должны совпасть 60% слов.

P.S. Конечно в конфигурациях сфинкса (там где вы писали запросы к БД) нужно в запрос к топикам добавить поле topic_tags

Написал просто ппц как, но мне простительно, см. время коммента. Надеюсь кто нить разберётся в этом ночном бреде