Эксперт по MODX
2,4
рейтинг
17 октября 2012 в 12:02

Разработка → Релиз новой версии модуля modLivestreet 0.3.0-rc

Продолжая нашу тему про модуль связки MODX и Livestreet, представляю новую версию модуля modLivestreet: livestreet-0.3.0-rc.transport.zip

Что нового? Да практически все :-) Модуль переписан с нуля.
1. Серьезно изменена (улучшена) логика обработки запросов на LiveStreet.
2. Добавлена синхронизированная регистрация пользователей в MODX и LiveStreet. Теперь регистрируя пользователя через админку MODX, пользователь автоматически создается в LiveStreet, а обрабатывая запрос на LiveStreet на регистрацию пользователя, регистрация проходит через MODX, что в свою очередь так же обеспечивает синхронную регистрацию пользователя в обоих движках.
Данную функцию можно отключать через настройку.

Под катом схемы работы (упрощенные) MODX в стандартной версии и с модулем modLivestreet и более подробное описание того, как происходит синхронная регистрация пользователей в MODX и Livestreet (Схему, как изменилась регистрация в MODX выложу позже), а так же исходники.

UPD: сборка пакета на github: github.com/Fi1osof/modx-livestreet

Обещанные схемы работы MODX в стандартной сборке и с модулем modLivestreet



Так как же работает этот модуль?

1. Самый главный плагин в данном модуле срабатывает на два события — onHandleRequest и onPageNotFound.
В первом случае происходит проверка на запросы к Livestreet в принципе (и инициализация переменных Livestreet), а так же проверка на обращение к статическим файлам Livestreet и отдельным его модулям (типа Captcha).
Во втором случае выполняется другая задача: если при обработке запроса MODX нашел целевую страницу, то событие onPageNotFound в принципе не сработает, и LiveStreet обрабатываться не будет, если в документе MODX явно не вызывается сниппет livestreet.run, который и выполняет запрос на LiveStreet. Такой подход позволяет нам не завязывать MODX только на LiveStreet. То есть мы можем сделать на MODX полностью независимый сайт, но сделать раздел /forum/ (или отдельный поддомен forum.site.ru), определить там входящую страницу, прописать в нее вызов сниппета [[!livestreet.ru]] (чтобы обеспечить корень сайта), в настройках указать livestreet.url_perfix '/forum/' и все. Все запросы на маску /forum/.* будут выполняться с вызовом LiveStreet и мы получаем свой блог. Здесь же можно дописать проверку прав или вызов только определенной ветки блога и т.д.
В случае же, если документ не найден и вызывается событие onPageNotFound, и УРЛ соответствует разделу Livestreet, то выполняется уже запрос на Livestreet. Тут маленькая оговорка: если это запрос на регистрацию пользователя Livestreet, то происходит вызов сниппета регистрации пользователь snippet.livestreet.ajax-registration.php

Вот листинг плагина
<?php
switch($modx->context->key){
	case 'web':
		break;
	default: return;
}

switch($modx->event->name){
    // Здесь мы будем проверять возможные запросы к статическому контенту LiveStreet
    case 'OnHandleRequest':
        // Чтобы подгрузить файл-конфиг livestreet_path/config/
        define('IN_MODX', true); 
        define('LIVESTREET_WEB', $modx->getOption('site_url'));
        define('LIVESTREET_PATH', $modx->getOption('livestreet.livestreet_path'));
        define('LIVESTREET_INDEX_FILE', $modx->getOption('livestreet.index_file'));
        define('LIVESTREET_URL_PREFIXE', $modx->getOption('livestreet.url_prefix'));
	$request = false;
        //print "<br />REQUEST_URI:" .  $_SERVER['REQUEST_URI'];

        // Определяем есть ли запрос на LiveStreet
        if($_SERVER['REQUEST_URI'] == LIVESTREET_URL_PREFIXE || $_SERVER['REQUEST_URI']."/" == LIVESTREET_URL_PREFIXE){
            $request = '/';
	}
	else{
            // Если это не раздел LiveStreet, пропускаем
            $preg = str_replace('/', '\/', LIVESTREET_URL_PREFIXE);

            if(!preg_match("/^{$preg}/", $_SERVER['REQUEST_URI']."/")){
                    return;
            }
            $request = preg_replace("/^{$preg}/", '', $_SERVER['REQUEST_URI']);

	}
        if( substr( $request, 0, 1) != '/')  $request = '/'. $request;   
        
        // Фиксируем запрос на LS
        define('LIVESTREET_REQUEST_URI', $request); 

        // Проверяем статус сайта, чтобы не отдавать контент, если сайт закрыт
        if(!$modx->checkSiteStatus()){
                return;
        }

        $file = LIVESTREET_INDEX_FILE;
	
        /*$t = $modx->invokeEvent('onLivestreetUserSave',  array('sdfsdf'));
	print_r($this->processEventResponse($t));
	exit;*/


        // Проверяем на обращение к директории LiveStreet   

        $preg = str_replace('/', '\/', "(/templates/|/uploads/|/engine/lib/external/jquery)");
        if(preg_match("/^{$preg}/", LIVESTREET_REQUEST_URI)){

            $file = LIVESTREET_REQUEST_URI; 
            $file = preg_replace('/\?+.*/', '', $file);

            $fullpath = str_replace('//','/', LIVESTREET_PATH.$file);
            if(!file_exists($fullpath)){
                    die('File Not Found');
            }

            $fsize = filesize($fullpath); 
            $pi = pathinfo( $file);
            $ext = $pi['extension'];
            switch ($ext) {
                case "css": $ctype="text/css; charset=utf-8"; break;
                case "js": $ctype="application/x-javascript; charset=utf-8"; break;
                case "pdf": $ctype="application/pdf"; break;
                case "exe": $ctype="application/octet-stream"; break;
                case "zip": $ctype="application/zip"; break;
                case "doc": $ctype="application/msword"; break;
                case "xls": $ctype="application/vnd.ms-excel"; break;
                case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
                case "gif": $ctype="image/gif"; break;
                case "png": $ctype="image/png"; break;
                case "jpeg":
                case "jpg": $ctype="image/jpg"; break;
                default: $ctype="application/force-download";
            } 

            header("Content-type: {$ctype}", true);  
            header("Content-Length: ".$fsize);
            header("last-modified: ". gmdate("d, d m y h:i:s", filemtime($fullpath) )." GMT"); 
            header("Pragma: public");  
            header("Expires: 0");  
            readfile($fullpath); 
            exit;
        }
        
        /* 
        * Определяем надо ли какой-нибудь модуль запускать
        */
        // Каптча
        $preg = str_replace('/', '\/', "/engine/lib/external/kcaptcha/");
        if(preg_match("/^{$preg}/", LIVESTREET_REQUEST_URI)){
            $file = 'engine/lib/external/kcaptcha/index.php'; 
            require_once LIVESTREET_PATH.$file;
            exit;
        }

        break;

    case 'OnPageNotFound':
        // if not LiveStreet request, stop
        if(!defined('LIVESTREET_REQUEST_URI')){
            return;
        }
        $_SERVER['REQUEST_URI'] = LIVESTREET_REQUEST_URI;

		// Registration
		if(LIVESTREET_REQUEST_URI == $modx->getOption('livestreet.registration_url', null, '/registration/ajax-registration/')){ 

			// if not in sync mode
			if($modx->getOption('livestreet.sync_users') == true){
				print $modx->runSnippet('livestreet.ajax-registration');
				exit;
			}
		}

        print $modx->runSnippet('livestreet.run');
        exit;

        break;
    default:
	$modx->event->output( 'true');
    ;
}

В принципе, как вы видите, плагин совсем не большой для такого функционала. Так что любой разберется, если захочет доработать его под свои нужды.

2. На выполнение запросов на LiveStreet используется сниппет snippet.livestreet.run

Листинг
<?php
if($request_uri){
	$_SERVER['REQUEST_URI'] = $request_uri;
}
ob_start();
    @include $modx->getOption('livestreet.livestreet_path').$modx->getOption('livestreet.index_file'); 
    $output = ob_get_contents();
ob_end_clean();

return $output;

Он совсем маленький. Тупо вызываем LiveStreet, буферизируем и возвращаем результат. Таким образом можно и контент обработать перед выводом, и результаты Ajax-запросов обработать для проверки выполнения (особенно это важно при выполнении регистрации пользователей, так как в случае синхронной регистрации пользователей в MODX и LiveSteet необходимо прервать регистрацию в случае проверки регистрации пользователя как в MODX, так и в Livestreet).

Тут опять оговорка. В Livestreet не совсем грамотно класс вывода контента работает. В режиме вывода Ajax-результатов LS делает тупо exit();, что обламывает работу всего модуля. Потому в LS необходимо сделать маленькую манипуляцию:
В файле components/livestreet/docs/forLiveStreet/source/engine/modules/viewer/Viewer.class.php
в методе DisplayAjax($sType='json') заменить exit(); на return;
а в методе Display($sTemplate) заменить
if ($this->sResponseAjax) {
	$this->DisplayAjax($this->sResponseAjax);
}
на
if ($this->sResponseAjax) {
	$this->DisplayAjax($this->sResponseAjax);
        return;
}

Принципиально это не изменит самостоятельной работы Livesreet, но даст нам возможность обрабатывать результаты Ajax-запросов и продолжать свою логику.

3. Сниппет livestreet.ajax-registration.
Этот сниппет обрабатывает запрос на регистрацию пользователя Livestreet.

Листинг
<?php
// if not in sync mode
if($modx->getOption('livestreet.sync_users') != true){
	return;
}

$path = $modx->getObject('modNamespace', array(
	'name' =>  'livestreet'
)) -> getCorePath()."processors/";
// print $path;

// exit;
$response = $modx->runProcessor('security/user/ajaxCreate', array(
	'username' => $_POST['login'],
	'email'	=> $_POST['mail'],
	'passwordnotifymethod' => 'false',
	'passwordgenmethod' => 'false',
	'specifiedpassword'	=> $_POST['password'],
	'confirmpassword'	=> $_POST['password_confirm'],
), array(
	'processors_path' => $path
));



$bStateError = false;
$sMsgTitle = null;
$sMsg = null;
$errors = array();

if($response->isError()){
	// print '<pre>';
	//print_r($modx->error->errors);




	$errorsArray = (array)$modx->error->errors;
	// processEventResponse
	// $error = $response->getMessage();
	if($errMessageArr = (array)explode("\n", $response->getMessage())){
		foreach($errMessageArr as $message){
			if(!$message = trim($message))continue;
			if(!$errArr = explode('::', $message) OR  count($errArr) != 2){
				$sMsg = $message;
			}
			else{
				$errorsArray[] = array(
					'id' => $errArr[0],
					'msg'	=> $errArr[1],
				); 
			}
		}
	}  

	foreach($errorsArray as $err){
		// LiveStreet Errors
		if($name = $err['id']){
		  switch($name){
		  	case 'username':
				$name =  'login';
				break;
			  case 'specifiedpassword':
				  $name = 'password';
				  break;
			case 'confirmpassword':
				$name = 'password_confirm';
				break;
			  default: continue;
		  }
		  $errors[$name][0] = $err['msg'];
		}
		// MODX errors
		else{

			$sMsg = current($err);
		}
	}

	if(!$errors && !$sMsg){
		$sMsg = 'Ошибка выполнения запроса';
	}
	if($sMsg){
		$sMsgTitle = 'Error';
		$bStateError = true;
	}
	$response = array(
	  'sMsgTitle' => $sMsgTitle,
	  'sMsg'	=> $sMsg,
	  'bStateError'	=> $bStateError,
	  'aErrors'	=> $errors
	);
}
else{
	// Success


	$response = array(
	  'sMsgTitle' => null,
	  'sMsg'	=> 'Поздравляем! Регистрация прошла успешно!',
	  'bStateError'	=> false,
	  'sUrlRedirect' => $_POST['return-path'],
	);

}

return json_encode($response);

Если в настройках отключена синхронная регистрация, то сниппет не выполняется, и если это прямой запрос на регистрацию пользователя в Livestreet, то запрос отправляется на Livestreet и все.
Если синхронная регистрация включена, то запрос отправляется не на Livestreet, а на регистрацию пользвателя в MODX (вызывается процессор core/components/livestreet/processors/security/user/ajaxCreate.class.php, где вызывается расширенный класс modUserCreateProcessor). Суть вызова этого процессора простая — вызвать базовый процессор на создание пользователя MODX через системный процессор modx/processors/security/user/create.class.php
Причина такого вызова в том, что мы не можем напрямую вызывать этот процессор, так как в нем выполняется проверка на право создания новых пользователей, а этого права нет у неавторизованного пользователя. Потому в этом классе мы просто затираем проверку этого права (За подсказку по этому приему отдельное спасибо bezumkin).

Листинг
<?php

$file = MODX_PROCESSORS_PATH.'security/user/create.class.php';  
if(!file_exists($file)){
    class modLivestreetUserCreateErrorProcessor extends modProcessor {
        public function process() {
            $err = 'processor security/user/create not found';
            $this->modx->log(modX::LOG_LEVEL_ERROR, $err);
            return $this->failure($err);
        }
    }
    return 'modLivestreetUserCreateErrorProcessor';
}

require_once $file;

class modLivestreetUserCreateProcessor extends modUserCreateProcessor {
    public $permission = '';
}
return 'modLivestreetUserCreateProcessor';


Ну а когда происходит регистрация пользователя в MODX, мы вешаем наш плагин livestreet_users на событие OnBeforeUserFormSave.

Листинг
<?php
/*
 * Synchronized registration MODX and Livestreet users
 */

switch($modx->event->name){
    case 'OnBeforeUserFormSave':
        switch($scriptProperties['mode']){
            // Register new user
            case 'new':
				// if not in sync mode
                if($modx->getOption('livestreet.sync_users') != true){
					return;
				}
                // Using for LiveStreet ModuleSecurity::GenerateSessionKey



                // check password method
                if($scriptProperties['data']['passwordgenmethod'] == 'g'){
                    $len = $modx->getOption('password_generated_length',null,8);

                    $password = $password_confirm = modUserValidation::generatePassword($len);
                    
                    /*
                     * note then newPassword in createProcessor will not be overwrited !!!
                     * in backend will see wron new passrowd
                     */
                    $scriptProperties['user']->set('password', $password); 
                }
                else{
                    $password = $scriptProperties['data']['specifiedpassword'];
                    $password_confirm = $scriptProperties['data']['confirmpassword'];
                }

                $_REQUEST['password'] = $password;
                $_REQUEST['password_confirm'] = $password_confirm;

                $_REQUEST['login'] = $scriptProperties['data']['username'];
                $_REQUEST['mail'] = $scriptProperties['data']['email'];

                $_REQUEST['login'] = $scriptProperties['data']['username']; 

				if($modx->context->key == 'mgr'){
					$captcha = time();
					$_SESSION['captcha_keystring'] = $captcha;
					$_REQUEST['captcha'] = $captcha;

					$_SESSION['user_id'] = '';

					$_REQUEST['security_ls_key'] =  md5( session_id(). $modx->getOption('livestreet.module.security.hash', null, 'livestreet_security_key'));
				}


                $response = $modx->runSnippet('livestreet.run', array(
                        'request_uri' => $modx->getOption('livestreet.registration_url')
                ));

                $response =  json_decode($response);
                
                if(!is_object($response)){
                        $modx->event->output('Ошибка выполнения запроса');
                }
                elseif($response->aErrors){ 
                    $errors = '';
					$errors__ = array();
                    foreach((array)$response->aErrors as $f => $val){
                        $errors .= "$f:: ". $val[0]."\n";
                    }

                    $modx->event->_output = $errors; 
                }
                return;
                break;
            default:;
        }
        break;
    default:$modx->log(modX::LOG_LEVEL_ERROR, "Wrong Event: ". $modx->event->name);
}

В момент регистрации пользователя MODX, после всех проверок (если все ОК), выполняется плагин и происходит попытка регистрации пользователя в LiveStreet. Если попытка обламывается, возвращаем ошибки LiveStreet и прерываем регистрацию пользователя MODX. Если все ок, то окончательно регистрируем пользователя в MODX.
Таким образом мы добиваемся того, что пользователей можно регить и через админку MODX, и через FrontEnd, и и там, и там мы увидим все возможные ошибки, и получим регистрацию пользователя и в MODX, и в LiveStreet. А в дальнейшем этих пользователей при надобности можем увязать по емейлу (так как в LS емейл — уникальный ключ).

Вот и все :-)
Вот за это я и люблю MODX:-) Мы серьезно изменили работу движка, не затронув и байта кода самого движка.
Но под MODX нет модуля социалки.
А вот Livestreet — отличная социалка, но она не дает такого API, как MODX. У них даже админки как таковой нет.
Но вместе эти движки могут дать отличный продукт! Буду и дальше развивать этот модуль.

UPD 2:Вышел новый релиз: modlivestreet-0.4.1-rc.transport.zip
Новое:
1. Все элементы и настройки теперь имеют префикс modLivestreet, потому к сожалению новый модуль не имеет обратной совместимости с прошлой версией. Но наверняка это ни для кого не будет проблемой. Достаточно удалить старый модуль и поставить новый и в главной странице изменить на
2. Добавлена проверка на расширение скачиваемых файлов из директорий /templates/, /uploads/ и т.п., чтобы не качали .php и т.п.
Конечно подобных файлов там и не должно быть, но как минимум в /skin/config/ такой файл есть.

UPD 3: Заметка по безопасности: modxlivestreet.ru/blog/modLivestreet_security/7.html
Ланец Николай @Fi1osof
карма
13,0
рейтинг 2,4
Эксперт по MODX
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (40)

  • +1
    Вот это заметка, так бы с первого раза!

    Большой респект за проделанную работу. Думаю, community.modx-cms.ru просто обязано теперь перейти на MODX Revolution + modLivestreet.

    • 0
      Вот это заметка, так бы с первого раза!
      Так тогда замечать еще практически нечего было. Тогда была основная часть — Идея и базовый прогон на LiveStreet. А вчера я много чего напрограммировал. Итоговый код получился компактный, но к нему я долго шел и было проделано много работы. Пока я изучил Revo 2.2.5… Я же до этого не более чем с 2.1.3 работал, а тут все совершенно по-другому.

      Думаю, community.modx-cms.ru просто обязано теперь перейти на MODX Revolution + modLivestreet.
      Думаю да. Сегодня вечером опубликую новый топик, что-то типа «Как за час развернуть сайт на MODX+Livestreet и впихнуть в Livestreet контент из MODX». На самом деле все очень хорошо получилось. А для интеграции MODX Revolution с их LiveStreet вообще ничего не требуется (кроме заметки про мелкую правку двух функций в LS, которые вообще не повлияют на текущую работу сайта). То есть у них все будет работать как и работает, они поставят Revo на другой домен, подключат к нему из LiveStreet и все — готово. Погоняют его, потому перенесут контент MODX и все, можно окончательно переключаться.
    • 0
      Василий, а мы таки сделали это :-)
      community.modx-cms.ru/blog/news/8923.html
      • 0
        Молодцы, надеюсь теперь сообщество перестанет топтаться на одном месте.

        Дизайн правда просто пипец какой страшный. Не знаю почему, но на modx.com Он смотрится хорошо, а тут закрыть глаза хочется. Ну и немного сервер надо настроить, отдавать всем подряд логи нехорошо.

        Кстати, у меня тоже обновление.
        • 0
          там некоторые элементы дизайна на главной пока скрыты, потому и может кому-то глаз резать. Да и не верстальщики мы профессиональные, а программисты.
          Со временем наверняка все прилижется. Но главное — это функционал. Он сейчас будет заметно наращиваться.

          На счет ошибок спасибо. Да, сервак доконфигурится.
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Хоть режьте меня не могу я представить для чего может потребоваться такой изврат. Неужели в лайфстрит нелья создавать текстовые странички? Ведь от MODX в данном случае требуется только это. А если это умеет лайфстрит, зачем городить такой лес из двух админок? Нужна вам соц.сеть — берите лайфстрит, MODX тут зачем…

    Думаю, community.modx-cms.ru просто обязано теперь перейти на MODX Revolution + modLivestreet.

    У них и так сейчас сделано тоже самое только на MODX Evo. Смысла переходить на Рево не вижу. Вот в случае, если бы они сделали весь функционал сообщества на MODX, другое дело.
    • +1
      1. Из одной админки — в LS пока нет админки.
      2. Из LS сейчас с помощью плагинов воротят все что угодно, но, на мой взгляд, не совсем нормально из блогосоциальной сети делать магазин + блогосоциалка.
      • –1
        магазин + блогосоциалка

        По-моему в таком случае лучше установить лайфстрит в папку домена и сделать совмещение регистрации и авторизации с MODX. А выводить лайфстрит внутри MODX это изврат.
        • –1
          По-моему в таком случае лучше установить лайфстрит в папку домена
          Этим вы уже наложили ограничение. Мое решение такого ограничения не накладывает.
          и сделать совмещение регистрации и авторизации с MODX
          И плюс к этому добавьте многоуровневые политики безопасности, группы пользователей, персональные настройки пользователей (в том числе языковые), настройте доступ к отдельным доменам и поддоменам для отдельных пользователей, а так же наделите отдельных пользователей полномочиями модерирования блогов отдельных групп пользователей… Это так, навскидку.
      • –1
        1. Есть — как плагин
        2. Странная логика — из MODx можно воротить что угодно, а из LS — это уже не совсем нормально. LS — вполне себе CMF, где точно так же можно (цитата их коммента выше) «серьезно изменять работу движка, не затронув и байта кода самого движка»
        • +1
          1. Для текущей актуальной версии — нет стабильного варианта.
          2. В какой-то мере, согласен, этим сейчас и занимаюсь. Погорячился.
          • –2
            Вы считаете, что скрестив MODx с LS автоматически тем самым получаете админку для LS? ;) У Вас ее как не было, так и нет
            • –1
              Вы считаете, что скрестив MODx с LS автоматически тем самым получаете админку для LS? ;) У Вас ее как не было, так и нет
              , но ее совершенно не проблема доделать в админке MODX, так как все для этого есть (кастомные меню, действия, контроль прав доступа к действиям, проверки, отладки и т.д. и т.п.). В LS этого нет.
              • 0
                Т.е. Вы предпочитаете написать полноценную админку для LS на MODx, нежели сделать ее «родными» LS-средствами? Хм, «месье знает толк в извращениях» (с)… :)
                • –2
                  А для вас новость, что независимые технологии объединяются? А ничего, что практически все расширения для php написаны на C? Нафига они так? Ведь практически все можно было на писать на чистом PHP, как Java — полностью самостоятельная технология.
                  А нафига SDK для разработки ПО под Android написано на Java?
                  И еще много можно привести примеров, но это будет пустое сотрясение воздуха для вас.
                  Я думаю, вам следует идти и написать еще что-нибудь про 3D, ведь вы скорее всего именно в этом сильны?
                  А я веб-программированием занимаюсь не первый год, и отлично знаю MODX и довольно хорошо LS (писал лично для себя всякие плюшки).
                  И могу точно сказать, еще пара недель, продукт оформится в достаточной мере чтобы и до вас дошло что и для чего делается.
                  • –1
                    Ой, вот чем я точно не намерен заниматься, так это рассуждать на отвлеченные темы, типа «а нафига попу гармонь?» Равно, как меряться причиндалами — кто и сколько лет чем занимается (тем более, что результат мне заведомо известен ;)

                    Если по существу сказать больше нечего, то пока на этом можно остановиться.
                    • –1
                      Да, от вас конкретика техническая тоже так и прет…
                      Всего хорошего!
            • +1
              Вы мифическим образом приписываете моим словам свой смысл. Выхожу из холивара.
              • –2
                Да, получается конкретный холивар, но меня крайне раздражает, когда кто-то упирается в свою линию чисто на домыслах и по своему невежеству, а не реально сделав что-то и обосновав на примере.
        • –2
          1. Есть — как плагин
          Так все же есть админка, или есть только плагин?
          LS — вполне себе CMF
          LS — это не CMF и таковыми себя не позиционируют. Об этом говорит как их домен livestreetcms.com, так и их тизер в шапке «LiveStreet CMS — это одна из лучших систем для создания блого-социальных сетей».
          Обратите внимание — «для создания блого-социальных сетей». Это непосредственно говорит об узкой направленности движка.
          • –1
            > Так все же есть админка, или есть только плагин?
            Что значит «только плагин»? Есть админка в виде плагина.

            >… таковыми себя не позиционируют
            А Вам шашечки или ехать? Смотрите не на буквы, а в суть. Функционал так называемой «социалки» там есть из коробки. При этом движок весьма неплохо может расшираться за счет системы плагинов, когда Вы не пилите ядро, а добавляете нужный функционал (или, если необходимо, переопределяете существующий) с помощью плагинов.

            Ответьте на вопрос — что можно сделать на MODx, чего нельзя на LS? Или так: что на MODx делается легко и просто, а на LS — тяжело и трудно? Тогда, может, понятно станет, к чему вся эта котовасия
            • –1
              < Что значит «только плагин»? Есть админка в виде плагина.
              Не путайте Божий дар с яичницей…

              < При этом движок весьма неплохо может расшираться за счет системы плагинов,
              Назовите мне хоть одну современную CMS, которая не хвастается тем, что для нее есть модули и плагины.

              <Ответьте на вопрос — что можно сделать на MODx, чего нельзя на LS? Или так: что на MODx делается легко и просто, а на LS — тяжело и трудно?
              Много что мог бы сказать, но достаточно и этого: habrahabr.ru/post/155063/#comment_5293537
    • 0
      Думаю, community.modx-cms.ru просто обязано теперь перейти на MODX Revolution + modLivestreet.
      У них и так сейчас сделано тоже самое только на MODX Evo. Смысла переходить на Рево не вижу. Вот в случае, если бы они сделали весь функционал сообщества на MODX, другое дело.
      А вот сообщество это предложение очень даже приняло. Так что совершенно не исключен скорый переезд.
      community.modx-cms.ru/blog/social-network/8766.html#comment55156
    • 0
      У них и так сейчас сделано тоже самое только на MODX Evo. Смысла переходить на Рево не вижу.

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

      В любом случае — человек выдал готовое решение, а кто и как его будет использовать — совсем другое дело.
      • –1
        Насколько я знаю, у них нет связи между этими сайтами. Это просто 2 разных сайта на 2х разных доменах.
        Нет, у них тоже сделана интеграция с MODX. Только зачем — не понятно. Всё тоже самое можно было сделать без MODX.
        • 0
          Это 2010 года новость, а разговоры были после обновления LS в 2012м.

          Видимо, не совместима интеграция с новой версией. В любом случае — это не наша головная боль =)
        • 0
          Извините, если для вас это — «интеграция» — то мы точно никогда друг друга не услышим… :-)
          По-моему в таком случае лучше установить лайфстрит в папку домена и сделать совмещение регистрации и авторизации с MODX.

          Вот этот пример как раз и демонстрирует разницу между MODX и Livestreet. Как в данном случае сделана автоматическая авторизация в MODX средствами чудо-CMF Livestreet:
          По просьбам трудящихся… Честно говоря совсем не хотел публиковать этот хак, так как он просто чудовищно черновой. Но раз настаиваете, ловите. Возможно кто-то сумеет это развить… От слов к делу.
          Модификация Livestreet
          Начнем с Livestreet. Все описанное относится к версии 0.3.1.
          Ищем файл /classes/modules/user/mapper/User.mapper.class.php
          Функция Add
          Строки
          if ($iId=$this->oDb->query($sql,$oUser->getLogin(),$oUser->getPassword(),$oUser->getMail(),$oUser->getDateRegister(),$oUser->getIpRegister(),$oUser->getActivate(),$oUser->getActivateKey())) {
                  return $iId;
          Заменяем на
          /**
           * Вставка для MODx-cms.ru
           * Добавление пользователя в таблицу
           */
          $sql = "INSERT INTO ".DB_MODX_TABLE_USER." 
                  (id,
                  username,
                  password
                  )
                  VALUES(?,  ?,  ?)       
          ";
          if($uId=$this->oDb->query($sql,$iId,$oUser->getLogin(),$oUser->getPassword())) {
                  
                  $sql = "INSERT INTO ".DB_MODX_TABLE_USER_ATTR." 
                          (id,
                          internalKey,
                          email
                          )
                          VALUES(?,  ?,  ?)       
                  ";
                  $this->oDb->query($sql,$iId,$iId,$oUser->getMail());
                                                  
          }
          /**
           * конец вставки
           */
          return $iId;
          и т.д. и т.п.
          Это чистый SQL-INSERT. Не заметили в той заметке восторженных возгласов автора по поводу своего решения? Нет? И не заметите, потому что автор нормальный программист и понимает, что вот это как раз конкретный, при чем именно вынужденный из-за ограничений, накладываемых Livestreet-ом, изврат.
          Где здесь проверки MODX на возможность создания такого пользователя? А как на счет сразу его в несколько групп занести? И что по поводу индивидуальных настроек и т.п.?

          А теперь, прежде чем продолжить спор, посмотрите мой листинг в пункте 3 про сниппет livestreet.ajax-registration. Там нет ни строчки прямого SQL и т.п., но главное — мы вызываем регистрацию непосредственно через запрос к Livestreet, который проводит все внутренние проверки, и если что не так, то возвращает ошибку, которую мы обрабатываем и возвращаем ответ.
  • –2
    Хоть режьте меня не могу я представить для чего может потребоваться такой изврат. Неужели в лайфстрит нелья создавать текстовые странички? Ведь от MODX в данном случае требуется только это. А если это умеет лайфстрит, зачем городить такой лес из двух админок? Нужна вам соц.сеть — берите лайфстрит, MODX тут зачем…
    Поймете со временем. Пока не напрягайтесь.
  • 0
    Позвольте полюбопытствовать, а зачем такая связка нужна? Что в ней практически полезного? Спрашиваю не ради праздности, а чисто ради того, чтобы применить сказанное на практике. Давно использую Модкс и Ливстрит, но в разных ролях. Не вижу, зачем их объединять.
  • +2
    Тут говорят в LS есть «админка»…
    Активировал это «чудо».
    Сравним?
    "Админка" Livestreet

    Админка MODX

    Никто не хочет попробовать LS доработать до уровня MODX?;-)
    • 0
      Тут говорят в LS есть «админка»…
      Активировал это «чудо».

      Вы вырываете из контекста, там написано что есть в виде плагина, а Вы сравниваете админку LS плагина Static Page и админку MODX. Вы бы для начала разобрались что Вы активировали прежде чем сравнивать. сравнение на Ваших скринах как минимум не точно.

      • 0
        Вы программист или как? Один говорит:
        1. Из одной админки — в LS пока нет админки.

        Другой возражает
        1. Есть — как плагин

        Так все-таки нет админки, или она есть? Если этот чел возражает, то это говорит о том, что она для него есть, в каком бы она виде не была. Если бы не возражал, то можно было бы расценивать, что он согласен, что ее нет. True or False.
        И вы туда же.
        а Вы сравниваете админку LS плагина Static Page
        . Пойду для себя запишу новый термин в ежедневник… Я счастлив! У меня в LS много админок есть! Админки плагинов))))
        • 0
          хватит придираться к словам, Вы практически все коментарии начинаете принимать в штыки.
          я например ни слова не сказал о том что Ваша работа плоха или не нужна, ибо считаю если чтото делается значит это коменибудь нужно, а лишь указал на Ваши неточноси в которых Вы сами (не я и не ктот иной делал Вам скринт) приводите как админку совершенно другой плагин, который к оной совершенно не относится.

          Вы же в свою очередь в упор не хотите смотреть что происходи вокруг и начинаете приводить какието нелепые примеры в свое оправдание.

          Кто Вам сказал что нет админки? Вы похоже даже не удосужились заглянуть в каталог в котором она лежит уже несколько лет (в новом каталоге почти год), что говорит о том что Вы весьма поверхностно знакомы с LS и с тем что для нее реализовано а что нет. Навернео Вы неплохой программист в своей области, но видимо в LS Вы все же не все знаете раз позволяете себе облажаться на подобных сравнениях.

          • 0
            Мои неточности? Каков вопрос, таков ответ. Я сделал скрин того, что человек назвал админкой. Скрин управления этим плагином я сделал, потому что там хоть какое-то управление наблюдалось, и это к вашему сведению, была часть админки, потому что админка — это панель Администратора, панель управления, и она может состоять из множества страниц, а не каждый ее отдельный модуль или отдельную страницу следует воспринимать как отдельную админку.
            Хорошо, сделал скрин главной страницы админки:

            У вас другая админка? Дайте свой скрин, ссылку на плагин и т.п.
            • 0
              да пожалста
              image
              вполне себе приличная админка
              • 0
                Да, действительно, еще чуть-чуть, и уже получится MODX… Это шутка с долей шутки.
                А если серьезно, то да, это уже как-то похоже на админку, но функционала минимум. Кто-то скажет, что этого минимума вполне достаточно, и что все что надо будет, можно будет докрутить. Но в случае с MODX докручивать практически ничего не надо. Вот в этой админке даже управления статическими файлами нет. А посмотрите скрины, как в MODX мы легко подключаем нужную нам папку Livestreet и имеем полное управление файлами из админки. И программить ничего не надо.

                Управление файлами Livestreet через админку MODX







                При всем уважении к автору данной админки-плагина, все-таки одному человеку столько не написать (я про админку MODX в целом).
                • 0
                  Вот Вы снова уходите от темы, я не писал что Ваши никчему не приведут, и не писал что админка mox «фуфло». Я написал что Вы не разбираясь в LS в полной мере начинаете приводить сравнения которые не совсем корректны, а именно — управление статическими страницами выдвать за админку LS и утверждать что таковой нет. Хотя теперь думаю убедились в обратном?

                  Ну а то что в админке LS нет управления файлами или какогото еще функционала кототрый есть в админке mox, не значит что он вобще должен там быть, если Вы не вкурсе то позволю себе довести до Вашего сведения что в дефолтной коробке LS механизма хранения статических файлов (изображения в топике и аватарки в расчет не брать) нет вобще, а значит и в админке его быть не может. А сам функционал файлов реализован другими плагинами, которые с легкостью встраиваются/могут быть встроены в эту адмику.

                  PS: не нужно меня пытаться убеждать скринами, я и так вполне неплохо знаком с modx., может и не в той мере в которой знаете его Вы но всеже нужный мне функционал реализовать самостоятельно смогу.
                  • 0
                    Тогда каждый останется при своем мнении

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.