Индексы в БД
Товарищи, совершенно забыл сделать индексы в БД :) Так что если медленно будет работать MySQL можно снести на этот досадный факт
/**
* Настройки вывода блоков
*/
$config['block']['rule_index_blog'] = array(
'path' => array(
'___path.root.web___/blog$',
'___path.root.web___/blog/*$',
'___path.root.web___/blog/*/*$',
'___path.root.web___/index/*$',
'___path.root.web___/blog/*/*\.html$',
'___path.root.web___/blog/*\.html$',
'___path.root.web___/top$',
'___path.root.web___/top/*$',
'___path.root.web___/top/*/*$',
'___path.root.web___/my/*$',
'___path.root.web___/my/*/*$',
),
$sTemplateName=in_array(Config::Get('view.skin'),array_map('basename',glob(Config::Get('path.root.server').'/plugins/'.$aMatches[1].'/templates/skin/*',GLOB_ONLYDIR)))
? Config::Get('view.skin')
: 'default';
$fGetTpl = create_function('$sPath','preg_match("/skin\/([\w]+)\/actions/i",$sPath,$aMatches); return $aMatches[1];');
$sTemplateName=in_array(Config::Get('view.skin'),array_map($fGetTpl,glob(Config::Get('path.root.server').'/plugins/'.$aMatches[1].'/templates/skin/*/actions/Action'.ucfirst($aMatches[2]),GLOB_ONLYDIR)))
? Config::Get('view.skin')
: 'default';
$this->getTemplatePathPlugin().'/actions/Action'.ucfirst($aMatches[2]).'/'.$sTemplate.'.tpl'
в случае без делегирования вернет /actions/ActionSettings/profile.tpl, а надо actions/ActionSettings/profile.tpl, поэтому первый слэш переносим отсюда в getTemplatePathPlugin(): $sDir=Config::Get('path.root.server')."/plugins/{$aMatches[1]}/templates/skin/{$sTemplateName}/";
if (is_null($this->sActionTemplate)) {
$this->SetTemplateAction($this->sCurrentEvent);
}
protected function SetTemplateAction($sTemplate) {
if($sActionTemplate=preg_match('/^Plugin([\w]+)_Action([\w]+)$/i',$this->GetActionClass(),$aMatches)) {
$sTplFile = 'actions/Action'.ucfirst($aMatches[2]).'/'.$sTemplate.'.tpl';
$sActionTemplate = is_file($this->getTemplatePathPlugin().$sTplFile)
? $this->getTemplatePathPlugin().$sTplFile
: $sTplFile;
}
$this->sActionTemplate = $sActionTemplate;
}
$this->Assign("ROUTE_PAGE_PAGE",ROUTE_PAGE_PAGE);
#header .profile { text-align: right; width: 300px; position: absolute; top: 15px; right: 23px; }
#header .profile.guest { width: 235px; text-align: left; padding-top: 12px; padding-right: 0; color: #ddd; }
SQL Error: Too many connections at /nfs/c03/h03/mnt/55936/domains/stavka.ru/html/classes/modules/sys_database/Database.class.php line 66
Array ( [code] => 1040 [message] => Too many connections [query] => mysql_connect() [context] => /nfs/c03/h03/mnt/55936/domains/stavka.ru/html/classes/modules/sys_database/Database.class.php line 66 )
$oDbSimple=DbSimple_Generic::connect($sDSN);
/** * Извлекает сериализованные данные топика */ protected function extractExtra() { if (null === $this->aExtra) { $aData = @unserialize($this->getExtra()); if (is_array($aData)) { $this->aExtra = $aData; } } } /** * Устанавливает значение нужного параметра * * @param string $sName Название параметра/данных * @param mixed $data Данные */ protected function setExtraValue($sName, $data) { $this->extractExtra(); $this->aExtra[$sName] = $data; $this->setExtra($this->aExtra); } /** * Извлекает значение параметра * * @param string $sName Название параметра * * @return null|mixed */ protected function getExtraValue($sName) { $this->extractExtra(); if (isset($this->aExtra[$sName])) { return $this->aExtra[$sName]; } return null; } /* *** ******************** *** */ /* *** SOURCE LINK OF TOPIC *** */ /** * Returns URL of topic's source link * * @param bool $bShort Shorten URL * * @return null|string */ public function getSourceLink($bShort = false) { if ($sUrl = $this->getExtraValue('url')) { if ($bShort) { $sUrl = htmlspecialchars($sUrl); if (preg_match('/^https?:\/\/(.*)$/i', $sUrl, $aMatch)) { $sUrl = $aMatch[1]; } $sUrlShort = substr($sUrl, 0, 30); if (strlen($sUrlShort) != strlen($sUrl)) { return $sUrlShort . '...'; } return $sUrl; } else { if (!preg_match('/^https?:\/\/(.*)$/i', $sUrl, $aMatch)) { $sUrl = 'http://' . $sUrl; } } return $sUrl; } return null; } /** * Set URL of topic's source link * * @param string $data */ public function setSourceLink($data) { $this->setExtraValue('url', strip_tags($data)); } /** * Возвращает количество переходов по ссылке в топике-ссылке * * @return int */ public function getSourceLinkCountJump() { return (int)$this->getExtraValue('count_jump'); } /** * Устанавливает количество переходов по ссылке в топике-ссылке * * @param string $data */ public function setSourceLinkCountJump($data) { $this->setExtraValue('count_jump', $data); } /* *** ********************** *** */ /* *** QUESTIONNAIRE OF TOPIC *** */ /** * Устанавливает вопрос * * @param string $data */ public function setQuestionTitle($data) { $this->setExtraValue('question_title', $data); } /** * Возвращает вопрос, если вопрос не указан - заголовок топика * * @return int|null */ public function getQuestionTitle() { if ($this->getExtraValue('question_title')) { return $this->getExtraValue('question_title'); } return $this->getTitle(); } /** * Добавляет вариант ответа в опросе топика * * @param string $data */ public function addQuestionAnswer($data) { $this->extractExtra(); $this->aExtra['answers'][] = array('text' => $data, 'count' => 0); $this->setExtra($this->aExtra); } /** * Очищает варианты ответа в опросе топика */ public function clearQuestionAnswer() { $this->setExtraValue('answers', array()); } /** * Возвращает варианты ответа в опросе топика * * @param bool $bSortVote * * @return array|null */ public function getQuestionAnswers($bSortVote = false) { $aAnswers = $this->getExtraValue('answers'); if ($aAnswers && $bSortVote) { uasort( $aAnswers, create_function( '$a,$b', "if (\$a['count'] == \$b['count']) { return 0; } return (\$a['count'] < \$b['count']) ? 1 : -1;" ) ); } return $aAnswers ? $aAnswers : array(); } /** * Увеличивает количество ответов на данный вариант в опросе топика * * @param int $sIdAnswer ID варианта ответа */ public function increaseQuestionAnswerVote($sIdAnswer) { if ($aAnswers = $this->getQuestionAnswers()) { if (isset($aAnswers[$sIdAnswer])) { $aAnswers[$sIdAnswer]['count']++; $this->aExtra['answers'] = $aAnswers; $this->setExtra($this->aExtra); } } } /** * Возвращает максимально количество ответов на вариант в опросе топика * * @return int */ public function getQuestionAnswerMax() { $aAnswers = $this->getQuestionAnswers(); $iMax = 0; foreach ($aAnswers as $aAns) { if ($aAns['count'] > $iMax) { $iMax = $aAns['count']; } } return $iMax; } /** * Возвращает в процентах количество проголосовавших за конкретный вариант * * @param int $sIdAnswer ID варианта * * @return int|string */ public function getQuestionAnswerPercent($sIdAnswer) { if ($aAnswers = $this->getQuestionAnswers()) { if (isset($aAnswers[$sIdAnswer])) { $iCountAll = $this->getQuestionCountVote() - $this->getQuestionCountVoteAbstain(); if (!$iCountAll == 0) { return number_format(round($aAnswers[$sIdAnswer]['count'] * 100 / $iCountAll, 1), 1, '.', ''); } } } return 0; } /** * Возвращает общее число принявших участие в опросе в опросе топика * * @return int */ public function getQuestionCountVote() { return (int)$this->getExtraValue('count_vote'); } /** * Устанавливает общее число принявших участие в опросе в опросе топика * * @param int $data */ public function setQuestionCountVote($data) { $this->setExtraValue('count_vote', $data); } /** * Возвращает число воздержавшихся от участия в опросе * * @return int */ public function getQuestionCountVoteAbstain() { return (int)$this->getExtraValue('count_vote_abstain'); } /** * Устанавливает число воздержавшихся от участия в опросе * * @param int $data * * @return mixed */ public function setQuestionCountVoteAbstain($data) { $this->setExtraValue('count_vote_abstain', $data); } /** * Возвращает фотографии из топика-фотосета * * @param int|null $iFromId ID с которого начинать выборку * @param int|null $iCount Количество * @return array */ public function getPhotosetPhotos($iFromId = null, $iCount = null) { return $this->Topic_getPhotosByTopicId($this->getId(), $iFromId, $iCount); } /** * Возвращает количество фотографий в топике-фотосете * * @return int|null */ public function getPhotosetCount() { return $this->getExtraValue('count_photo'); } /** * Возвращает ID главной фото в топике-фотосете * * @return int|null */ public function getPhotosetMainPhotoId() { $oImage = $this->getPhotosetMainPhoto(); if ($oImage) { return $oImage->getMresourceId(); } return $this->getExtraValue('main_photo_id'); } /** * Устанавливает ID главной фото в топике-фотосете * * @param int $data */ public function setPhotosetMainPhotoId($iPhotoId) { $this->setExtraValue('main_photo_id', $iPhotoId); $this->setProp('_photoset_photos', null); } /** * Устанавливает количество фотографий в топике-фотосете * * @param int $data */ public function setPhotosetCount($iCount) { $this->setExtraValue('count_photo', $iCount); $this->setProp('_photoset_photos', null); }