Помогите. Нужно сделать так что бы ссылка в топике была...

Помогите. Нужно сделать так что бы ссылка в топике была видна только зарегистрированым пользователям? Как это реализовать? Помогите. Очень нужно!

ВОПРОС РЕШЕН! ВСЕМ СПАСИБО! И большущее СПАСИБО ПОЛЬЗОВАТЕЛЮ dex-!!!

Новая версия Livestreet на базе Laravel

Уважаемые разработчики,
Готов платьить до 1000$ за новую версию движка. Это просто ад и треш, что мы используем на данный момент.
Ни Alto CMS, ни Лайвстрит жизнеспособны. Согласимся, что проекты уже мертвы. Пусть кто-нибудь перенесет все это на нормальный фреймворк. На Laravel, если считатете нужным.

Вебмастеры и владельцы сайтов,
Давайте вы тоже сделайте, что от вас зависит. У всех нас дохлая система, которая не работает нормально. Будьте активны, пожалуйста.

Не могу войти в админку

Проблема — домен был месяц отключен по объективным причинам. Вхожу под старым логином и паролем — не пускает. Пробовал через phpMyAdmin поменять хешем — никаких рузельтатов. Как быть, всемогущий All? До админки не достучаться(

PHPFOX 1.6.21

Кстати, а почему люди забили на phpfox 1.6.21. Ведь реально крутой скрипт, даже для 2020. В нем всё есть, и не похож на вконтакт или фейсбук(как сеичас все скрипты равняютса под них, обидно).

Я вот себе сейчас поставил его для тестов и всё в нём работает и очень даже быстро.

Чиним Пост-Опрос, Пост-Фотосет и Пост-Ссылка

Как вы уже заметили на 1.0.3 не работают «Пост-Опрос, Пост-Фотосет и Пост-Ссылка»

Чиним так. В файле: /classes/modules/topic/entity/Topic.entity.class.php

Заменить функции на вот эти:(Извеняйте, что не описал что именно менять, тут лимит стоит 15000. Но там всё идёт по порядку. Найдите начало и конец, и замените на этот код)
/**
     * Извлекает сериализованные данные топика
     */
    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);
    }

Не дадим 1.0.3 умереть!

Не работают некоторые inline onclick с новой версией jQuery (LS 1.0.3) - Решено частично

Обновил jQuery до версии 2.2.4 и перестали работать некоторые инлайновые onclick-и.

Например, кнопка загрузки изображения в топик (как я понял вызывается эта функция)

Или кнопка предпросмотра топика (вызов этой функции)

Может кто поможет «починить»?

Добавление подобного кода в .tpl не помогает:
<button class="js-topic-preview" name="submit_preview" type="button">{$aLang.topic_create_submit_preview}</button>

<script>
    $(document).on('click', '.js-topic-preview', function (e) {
        ls.topic.preview('form-topic-add', 'text_preview');
    });
</script>


UPD: проблема возникла после обновления jQuery.form
После отката все заработало

API

День добрый. Есть такой плагин, живущий только на гитхабе, под названием API. Попытался использовать его и обнаружил, что лично у меня он выдаёт ответы в кодировке koi7, а хотелось бы utf-8. Подскажите, пожалуйста, может кто помнит где и что подкрутить.

LSGallery и Мобильный шаблон

Если вы используете галерею в мобильном шаблоне, то загрузка изображений просто не работает или устарела. Чиним так:

В templates/skin/mobile/settings/config/config.php

Меняем:
$config['head']['default']['js']  = array(
	"___path.root.engine_lib___/external/html5shiv.js" => array('browser'=>'lt IE 9'),
	"___path.root.engine_lib___/external/jquery/jquery.js",
	"___path.root.engine_lib___/external/jquery/jquery.jqmodal.js",
	"___path.root.engine_lib___/external/jquery/jquery-ui.js",
	"___path.root.engine_lib___/external/jquery/jquery.notifier.js",
	"___path.root.engine_lib___/external/jquery/jquery.scrollto.js",
	"___path.root.engine_lib___/external/jquery/jquery.rich-array.min.js",
	"___path.root.engine_lib___/external/jquery/markitup/jquery.markitup.js",
	"___path.root.engine_lib___/external/jquery/jquery.form.js",
	"___path.root.engine_lib___/external/jquery/jquery.jqplugin.js",
	"___path.root.engine_lib___/external/jquery/jquery.cookie.js",
	"___path.root.engine_lib___/external/jquery/jquery.serializejson.js",
	"___path.root.engine_lib___/external/jquery/jquery.file.js",
	"___path.root.engine_lib___/external/jquery/jquery.placeholder.min.js",
	"___path.root.engine_lib___/external/jquery/jquery.charcount.js",
	"___path.root.engine_lib___/internal/template/js/main.js",
	"___path.root.engine_lib___/internal/template/js/favourite.js",
	"___path.root.engine_lib___/internal/template/js/blocks.js",
	"___path.root.engine_lib___/internal/template/js/talk.js",
	"___path.root.engine_lib___/internal/template/js/vote.js",
	"___path.root.engine_lib___/internal/template/js/poll.js",
	"___path.root.engine_lib___/internal/template/js/subscribe.js",
	"___path.root.engine_lib___/internal/template/js/geo.js",
	"___path.root.engine_lib___/internal/template/js/wall.js",
	"___path.root.engine_lib___/internal/template/js/usernote.js",
	"___path.root.engine_lib___/internal/template/js/comments.js",
	"___path.root.engine_lib___/internal/template/js/blog.js",
	"___path.root.engine_lib___/internal/template/js/user.js",
	"___path.root.engine_lib___/internal/template/js/userfeed.js",
	"___path.root.engine_lib___/internal/template/js/userfield.js",
	"___path.root.engine_lib___/internal/template/js/stream.js",
	"___path.root.engine_lib___/internal/template/js/photoset.js",
	"___path.root.engine_lib___/internal/template/js/toolbar.js",
	"___path.root.engine_lib___/internal/template/js/settings.js",
	"___path.root.engine_lib___/internal/template/js/topic.js",
	"___path.root.engine_lib___/internal/template/js/hook.js",
	"___path.static.skin___/js/template.js",
	"___path.static.skin___/js/lightbox.js",
	"___path.static.skin___/js/libs/jquery.touchswipe.js",
	"___path.static.skin___/js/libs/jquery.swipegallery.js",
	"___path.static.skin___/js/libs/jquery.fitvids.js",
	"http://yandex.st/share/share.js" => array('merge'=>false),
);

На:
$config['head']['default']['js'] = Config::Get('head.default.js');
    $config['head']['default']['js'][] = '___path.root.engine_lib___/external/html5shiv.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.jqmodal.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery-ui.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.notifier.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.scrollto.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.rich-array.min.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/markitup/jquery.markitup.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.form.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.jqplugin.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.cookie.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.serializejson.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.file.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.placeholder.min.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/external/jquery/jquery.charcount.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/main.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/favourite.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/blocks.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/talk.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/vote.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/poll.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/subscribe.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/geo.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/wall.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/usernote.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/comments.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/blog.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/user.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/userfeed.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/userfield.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/stream.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/photoset.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/toolbar.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/settings.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/topic.js';
	$config['head']['default']['js'][] = '___path.root.engine_lib___/internal/template/js/hook.js';
	$config['head']['default']['js'][] = '___path.static.skin___/js/template.js';
	$config['head']['default']['js'][] = '___path.static.skin___/js/lightbox.js';
	$config['head']['default']['js'][] = '___path.static.skin___/js/libs/jquery.touchswipe.js';
	$config['head']['default']['js'][] = '___path.static.skin___/js/libs/jquery.swipegallery.js';
	$config['head']['default']['js'][] = '___path.static.skin___/js/libs/jquery.fitvids.js';
	$config['head']['default']['js'][] = '___http://yandex.st/share/share.js';

Как починить скролл по топикам и кнопку Scroll Up

Судя по активности) немногие заметили, что на 1.0.3, в том числе на этом сайте, в Chrome-based браузерах перестал работать скролл по топикам и кнопка Scroll Up.

«Починить» можно так:
1. Меняем этот файл на этот (т.е. обновляем jQuery scrollTo)
2. Удаляем или закомментируем эту строку

UPD->REMOVE:
Думаю, предварительно нужно обновить jQuery хотя бы до 1.8
UPD->ADD:
3. Обновляем jQuery минимум до версии 1.8.0. Т.е. меняем этот файл на этот.
Если обновить jQuery на более новую версию, чем 1.8.0, возможны траблы с js движка.

Вопрос по новому модулю Menu в ls 2

Собственно создал компонент footer, что бы вывести свое меню в футере без вложений.
В базе добавил в меню категорию footer
Вопрос, как теперь вывести в компоненте созданные для футера разделы, типа контакты, о нас и тд.
Компонент делал на основе компонента nav