avatar
+62.91
154.072

Вадим

Пытаюсь сообразить хотя бы чисто теоретически, где может быть проблема. Раз браузер пытается вывести изображение, то заголовок header(«Content-Type: image/jpeg») в браузер передается. После этого идет вывод самого изображения чисто пхп-шной функцией imagejpeg(). Там ломаться вообще нечему…
А, так это версия 1.0+? В этой версии плагин рекаптча не будет работать, она только для 1.1 (
Просто активируется плагин recaptcha и все. Замена каптчи-картинки на гугловскую сама выполнится
Вообще полного отключения капчи не предусмотрено, но можно вместо картинки подключить гугловскую реКапчу, плагин идет в комплекте с движком.

www.google.com/recaptcha/admin — здесь можно получить ключи для нее.

common/plugins/recaptcha/config/config.php — здесь задаются настройки
Хм, странно это. А если просто набрать site.com/captcha/ (т.е. без параметра, без цифр в конце), то та же ошибка?
Скажите, это проявляется в Firefox? Расширение Скайп стоит?
Это когда изображение капчи напрямую пробуете открыть? А в логе какие-то ошибки есть?

Чтобы не мешать с другими ошибками (если они были), файл /_tmp/logs/error.log лучше удалить, еще раз попробовать посмотреть капчу, а потом посмотреть, нет ли ощибок в лог-файле
Первым делом надо смотреть, а работает ли капча вообще. Т.е. клик правой кнопкой мыши по тому месту, где должна быть капча и «Открыть в новой вкладке», «Открыть изображение» или что-то в этом роде (в зависимости от браузера).

Если изображение в новом окне/вкладке отображается нормально, то почти наверняка проблема в том, что в конфиге адрес сайта явно задан с www, а юзер заходит без www или наоборот. Т.е. в конфиге, напр., стоит:
$config['path']['root']['url'] = 'http://www.site.com/';
А юзер заходит просто site.com (без www). И браузер блокирует запрос к другому домену.
Глянул навскидку — как-то очень уж замороченно вставляется эта штука:
developers.google.com/maps/documentation/javascript/examples/places-searchbox?hl=ru

Разбираться надо, вникать…
Уже известна эта проблема, но пока непонятно, как из-за чего она случается. Но искать причину, конечно, будем.
Сделать это можно так:

1) Смотрите в админке ID поля, которое хотите выводить особым образом.
2) В шаблоне пишите такой код:

    {$oTopicField = $oTopic->getField(id)}
    {if $oTopicField}
        // Здесь код для отображения дополнительного поля
    {/if}
Здесь в выражении $oTopic->getField(id) Вы подставляете тот ID, который нужно.
common/plugins/maps/templates/skin/default/fields/customs/maps/yandex/edit.tpl

Там вместо {json var=Config::Get('plugin.maps.map_center')} надо {json var=$aMapDefaultCenter}

Скрипты Я.Карт не понимают, когда координаты одной строкой передаются, им нужно обязательно массивом. А Гуглы переваривают без проблем
Из дочки (то бишь из класса-наследника) как раз и можно изменить. Это же не private-свойство
Модерация прошла. Но рекомендация по вызову методов модулей:
$this->User_GetUserByLogin($sUserProfileLogin);       // Старый способ
E::ModuleUser()->GetUserByLogin($sUserProfileLogin);  // Новый способ

$this->Viewer_Assign('referals', $referals);      // Старый способ
E::ModuleViewer()->Assign('referals', $referals); // Новый способ

$this->PluginReferals_Referals_getReferals($oUserProfile->getId());        // Старый способ
E::Module('PluginReferals\Referals')->getReferals($oUserProfile->getId()); // Новый способ
Я бы советовал для плагинов, которые под 1.1+ пишутся, сразу придерживаться нового способа вызовов. Так и наглядней, и с точки зрения совместимости с будущими версиями лучше.

И еще момент — в шаблон передается текущий юзер:
$this->Viewer_Assign('user', $this->User_GetUserCurrent());
Если в шаблоне нужно использовать сущность текущего юзера, то лучше не передавать его в шаблон таким образом, а обращаться к нему прямо в шаблоне. Например, сейчас в шаблоне так:
{if $user and ($oUserProfile->getLogin() == $user->getLogin())}
    <div class="block-subheader">
        {$aLang.plugin.referals.referal_link}:
 {router page='ref'}{$oUserProfile->getLogin()}/
    </div>
{/if}
А рекомендуется так:
{if E::User() and ($oUserProfile->getLogin() == E::User()->getLogin())}
    <div class="block-subheader">
        {$aLang.plugin.referals.referal_link}:
 {router page='ref'}{$oUserProfile->getLogin()}/
    </div>
{/if}
Если страница выводится не полностью (сайдбар ломается, нет футера), то, скорее всего, произошла ошибка во время рендеринга какого-то файла шаблона, а, значит, лог ошибок надо смотреть.
Так: /app/templates/skin/experience-simple/settings/config/
Этой возможности никто не отменяет. Но если нужно изменить фильтр для конкретного случая — напр., для метода GetTopicsDiscussed(), то buildFilter() мудрено будет угадать, для чего строится фильтр.
Ну здесь у вас надо сначала логику более четко продумать. В той схеме, что вы описываете, логика плагинов друг другу противоречит: по логике плагина 1 самым верхним должен быть топик с последним комментом, а по логике плагина 2 — тот, который админ отметил.

Если же логика такая: при включенном плагине 2 мы ВСЕГДА сначала получаем топики «прилепленные» и только потом уже по любой другой логике, то можно воспользоваться этим: altocms.ru/1127.html

Например, так:
class PluginMine_ModuleTopic extends PluginMine_Inherits_ModuleTopic {

    public function Init() {
        parent::Init();
        $this->GetTopicsFilter(); // получаем фильтр по умолчанию
        $aFilter['order'] = array('...'); // здесь задаем первичную сортировку
        $this->SetTopicsFilter($aFilter); // задаем свой фильтр
    }
}
Только надо учесть, что код тут немного упрощен — ведь другие плагины тоже могут менять сортировку по умолчанию, поэтому, если грамотно делать, надо проверять — а нет ли уже у фильтра индекса 'order', и если есть, то свою сортировку добавлять либо в начало, либо в конец массива (это уж от задумки разработчика зависит)
Вот: altocms.ru/1127.html

Упрощает задачу?
Как уже писал выше, сейчас работаю как раз над тем, как решать подобные задачи. Планировал в следующей версии это реализовать, но будет уже в релизе 1.1. Чуть позже напишу топик об этом.