+23.14
Рейтинг
79.20
Сила

Владимир

Всем привет, давно меня здесь не было, уже много лет нет проектов на LiveStreet, но он навсегда останется в моём сердце. И если кто-то решил создать версию 3.0 на Laravel, то я обязательно присоединюсь к разработке, как минимум, в качестве разработчика плагинов :)
По обилию эмоций в посте хочется думать, что тебе не безразлична судьба проекта. Я твоих идей и предложений до сего не видел и не слышал. Проект действительно не имеет определенной стратегической цели. Я работаю над ним потому, что сам пишу проекты используя его код.
Мне бы хотелось «вытащить» Livestreet, чтобы им пользовались, чтобы он набирал популярность. Но пока я не вижу определенной ниши, куда его можно вписать так, чтобы он мог выстрелить. Максим не мало времени на него потратил, но дальше у него нет возможности и желания поддерживать код, выпускать новые версии, итд. Он просто взял наработки Livestreet и пилит проекты на заказ. Осуждать его за то что он не поддержал твои идеи. У него наверняка были причины, опыт какой то. В моей жизни тоже бывали такие «старперы», которые заявляются с идеями, Я пооддеживаю, начинаю работать над ними, а потом не успепха ни старперов.
Пока livestreet на реставрации, он стоит в доке и никуда не плывет. Я по мере своих возможностей выделяю время на него, и хочу чтобы он просто стал универсальным, не только для Блогов и статей, а так же заменить старый код и прикрутить новые фичи PHP.
Почему я этим занимаюсь? Да потому же почему Максим до сих пор использует Livestreet. Потому что опыта работы с ним много, а с Yii например мало. Всяческих сайтов, модулей, плагинов написано много, все под Livestreet, все это требует поддержки, доработки. Так зачем убегать от этого, например в Yii или Laravel?
Если ты такой весь идейный, чувствуешь рынок и все такое, Предлагай! Я все таки не Макс. И Livestreet не является моим собственным, любой может внести свои 5 копеек. А то пока что на палубе никого не видно, все по каютам сидят и ни звука, только предлагают на Laravel перейти. Но я не смог найти сил и времени пока начать новые скачки с препядствиями.
  • avatar ort
  • 2
на 5.3 должен работать, на 5.4 тоже работает
а вот на 5.5 не тестировался
Не давно пилил такой блог. Функционал с движка не вырезал, просто закрутил гайки. Как написал выше lifecom.

1. Где надо показываю только админу, например stream, people, etc:

{if $oUserCurrent and $oUserCurrent->isAdministrator()}
...
{/if}


2. Вывод функционала блоков, или лент, профилей, которые не нужны просто выпилил html или отключил конфигом.

3. Закинул в админку ссылки на настройки профиля.

4. Настроил рейтинг для публикации.

5. Можно еще регистрацию прикрыть.

6. Открыл коментирование для не зарегистрированных.
  • avatar ort
  • 1
Шаблоны компонентов из плагина можно переопределять так:
protected $aInherits = array(
        'template' => array(
            'component.alert.alert' => '_myalert.tpl',
        ),
    );

Сначала идет ключевое слово component, потом название компонента, а за ним шаблон компонента.
Вообще использовать $aDelegates не стоит, для шаблонов уже можно использовать $aInherits, причем это позволит переопределить шаблон частично, а не полностью (при условии, что шаблон используется smarty блоки).

Компоненты можно переопределять (полностью и частично) из шаблона, об этом будет подробная документация.
  • avatar Chiliec
  • 2
Короче… плагинов никаких не надо.
Идёте сюда: github.com/livestreet/livestreet/blob/1.0.3/classes/modules/acl/ACL.class.php#L395-L406 меняете на:
/**
 * Проверяет может ли пользователь удалить комментарий
 *
 * @param  ModuleUser_EntityUser $oUser	Пользователь
 * @return bool
 */
public function CanDeleteComment($oUser) {
	if (!$oUser || !$oUser->isAdministrator() && $this->User_GetUserCurrent()->getId() != $oUser->getId()) {
		return false;
	}
	return true;
}
затем сюда: github.com/livestreet/livestreet/blob/1.0.3/templates/skin/synio/comment.tpl#L92-L98 меняете на:
{if !$oComment->getDelete() and $oUserCurrent and $oUserCurrent->getId() == $oComment->getUserId()}
	<li><a href="#" class="comment-delete link-dotted" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_delete}</a></li>
{/if}

{if $oComment->getDelete() and $oUserCurrent and $oUserCurrent->getId() == $oComment->getUserId()}}
	<li><a href="#" class="comment-repair link-dotted" onclick="ls.comments.toggle(this,{$oComment->getId()}); return false;">{$aLang.comment_repair}</a></li>
{/if}
Profit!
Я знаю, что это может не понравится сообществу, но всё же аналог Пикабу это движок pligg.com
Всё что вам надо там есть, но учтите он иностранный и «у нас» с ним мало кто работает, поэтому может стать и дороже и сложнее, нежели реализовать на LS.
  • avatar PSNet
  • 3
Я знаю куда нужно вставлять код, но как определить, что топик первый на странице?
поставить условие посреди цикла, например:
{if $oTopic@iteration == 0}
    first
{/if}
  • avatar AlikMis
  • 3
не знаю зачем Вам эта глупость
быдлокод на коленке :)

classes/hooks/HookPostreadingtime.class.php

<?php
//===============================================================
class HookPostreadingtime extends Hook{
//===============================================================
	public function RegisterHook(){
		$this->AddHook('template_topic_show_info','inj_topic_show_info',__CLASS__);
	}
//===============================================================
	public function inj_topic_show_info($aVars){
		$iReading=200;//google: Средняя скорость чтения 200-250 слов в минуту
		$iWords=count(explode(' ',strip_tags($aVars['topic']->getText())));
		$iMinutes=floor($iWords/$iReading);
		$iSeconds=floor(($iWords%$iReading)/($iReading/60));
		$sReturn=($iMinutes>0)?' '.$iMinutes.' мин.':'';
		$sReturn.=($iSeconds>0)?' '.$iSeconds.' сек.':(($iMinutes>0)?'':' моментально.');
		return '<li class="topic-info-date">Время прочтения: '.$sReturn.'</li>';
	}
//===============================================================
}
?>

И по традиции выше описанное не проверялось
github.com/livestreet/livestreet/blob/1.0.3-replication/engine/lib/external/LiveImage/Image.php#L116
при загрузке изображение не проверяется на тип после .(точки) Проверка идет по Mime-тайпу. Проверьте через файербаг какой результат получаете.
github.com/livestreet/livestreet/blob/1.0.3-replication/classes/modules/blog/Blog.class.php#L672
Уберите условие:
if ($oUser->isAdministrator()) {
    return $this->GetBlogs();
} else {}
  • avatar gizik
  • 0
В файле \engine\modules\text\Text.class.php

после кода:
$sText = preg_replace('/<video>http:\/\/video\.yandex\.ru\/users\/([a-zA-Z0-9_\-]+)\/view\/(\d+).*<\/video>/i', '<object width="467" height="345"><param name="wmode" value="opaque"></param><param name="video" value="http://video.yandex.ru/users/$1/view/$2/get-object-by-url/redirect"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="noscale"></param><embed src="http://video.yandex.ru/users/$1/view/$2/get-object-by-url/redirect" type="application/x-shockwave-flash" width="467" height="345" allowFullScreen="true" scale="noscale"></embed></param></embed></object>', $sText);
		return $sText;


Вставляешь этот код

/**
		 * coub.com
		 */
		$sText = preg_replace('/<video>http:\/\/(?:www\.|)coub\.com\/view\/(\w+).*<\/video>/i', '<iframe src="http://coub.com/embed/$1?muted=false&autostart=false&originalSize=false&hideTopBar=false&noSiteButtons=false&startWithHD=false" allowfullscreen="true" frameborder="0" width="640" height="480"></iframe>', $sText);


И радуешься)
\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 rsmike
  • 0
Таких никчемных топиков было штук триста, по итогам вялого срача каждый раз выяснялось, что автор некомпетентен в программировании, а все недостатки движка суть есть несовпадения с его личными хотелками, снабженными убойным аргументом «потому что я так считаю от имени всех».

Нет никакой ценности в том, чтобы «представлять мнение 95% безграмотных пользователей». Никакой. Пулл-реквест это ценно, новый плагин это ценно, найденный баг это ценно, псевдоумные рассуждения о том, как должен развиваться движок — никому не нужны.
это называется utm-метки. Позволяют в яндекс-метрике и гугло-аналитике отслеживать эффективность переходов по кампаниям.
Проще всего реализовать здесь: support.google.com/analytics/answer/1033867?rd=2
  • avatar emmy
  • 5
Ох не надо уж на менталитет пенять, если сам мудак.
  • avatar skif
  • 0
Это не должно быть столь сложно.

1. Обязательным поле можно сделать изменив aValidateRules в сущности пользователя
protected $aValidateRules=array(
                ...
		array('user_profile_name','string','allowEmpty'=>false,'on'=>array('registration','')),
                ...
	);


2. Для вывода в шаблоны сущность пользователя расширить функцией (если проект только стартует и нет пользователей с незаполненным полем ФИО, то функцию можно и не вставлять, а заменить в шаблонах getLogin() на getProfileName() в нужных местах)
public function getRealName() {

	if ($this->_getDataOne('user_profile_name')) {
		return $this->_getDataOne('user_profile_name');
	} else {
		return $this->_getDataOne('user_login');
	}

}
и уже ей заменить все $oUser->getLogin(); (это пожалуй будет самым трудоемким). И этот пункт так же делает невозможным создание плагина потому как нужно будет переписывать много кода в шаблоне. Это конечно же несколько смущает потому как существенно затруднит апгрейд движка.

Ну и соответственно нужно будет добавить необходимые поля в шаблоны и немного кода в экшен регистрации. Если пойти дальше то можно вовсе упразднить логин как таковой, и использовать id пользователя в его качестве.

Вообще можно было бы конечно сделать настройку вида
$config['module']['user']['use_real_names'] = true;
но это уже вопрос к разработчикам и к Максиму в частности )
Предлагаю решение лучше каптчи, при условии, что у вас статический IP. Запишите в .htaccess:
<Directory /admin/>
Order deny, allow
deny from all
Allow from 8.8.8.8 # Ваш IP
</Directory>
github.com/livestreet/livestreet/blob/master/engine/modules/text/Text.class.php#L105
В самое начало функции добавьте просто возврат переданного текста:
return $sText;
UPDATE `prefix_topic` SET `topic_publish_index` = 1

Google в помощь: mysql обновить поле всех записей