man

man

С нами с 04 января 2016; Место в рейтинге пользователей: #237
Илья Уткин
09 марта 2017, 09:47
3
+6
Создаёшь в папке index.php и открываешь так: s8820.h5.modhost.pro/console/
<?php
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    @ini_set('display_errors', 1);
    $code = str_replace(array('<?php', '?>'), '', $_POST['code']);
    ob_start();
    $result = eval($code);
    $output = ob_get_contents();
    ob_end_clean();
    if($result){
        $output = $result;
    }
    echo $output;
    die();
}
?><!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Console</title>
    <link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <style>
        .ace_editor {
            height: 250px !important;
        }
        body {
            padding-bottom: 80px;
        }
    </style>
  </head>

  <body>
    
    <div class="container">
        

        <h1>Console</h1>
        <form action="" class="jumbotron" id="code_form" method="post">
            <textarea class="form-control" name="code" id="code" rows="15"><?php echo "<?php\n"; ?></textarea>
            
            <input type="submit" class="btn btn-lg btn-primary" value="Выполнить" onclick="return run();">
        </form>
        <div id="result"></div>
    </div>

    <script src="https://ace.c9.io/build/src/ace.js"></script>
    <script>
        function run() {
            document.getElementById("result").innerHTML = '<img src="http://downloads.pcauthority.com.au/images/spinner.gif">';
            $.ajax({
                url: document.location.href,
                type: "POST",
                dataType: "html",
                data: {code: window.editor.getValue()},
                success: function(response) {
                    $("#result").html(response);
                },
                error: function(response) {
                    $("#result").html("Ошибка сервера");
                }
             });
             return false;
        }
        window.onkeydown = function(e) {
            if (e.ctrlKey) {
                if (e.keyCode == 13) {
                    run();
                }
            }
        };
        window.editor = ace.edit("code");
        window.editor.setTheme("ace/theme/monokai");
        window.editor.getSession().setMode("ace/mode/php");
        window.editor.gotoLine(2);
        window.editor.focus();
    </script>
  </body>
</html>
Илья Уткин
03 февраля 2017, 19:53
1
+1
Второй ТВ лучше сделать с помощью tvSuperSelect, иначе фильтрация выйдет очень монструозной. А фильтрация по первому ТВ можно сделать с помощью обычного tvFilters в pdoResources.
Сергей
30 января 2017, 18:57
1
0
Спасибо, вы правильно поняли, все заработало :)

Меня как новичка смутил код:

{$parent | resource: 'pagetitle'}
Подумал, что нужно как то вместе использовать.
Максим Кузнецов
24 января 2017, 12:38
3
+1
Примерно так в плагине, но это решение увеличит время создания основной страницы:

if ($modx->event->name == 'OnDocFormSave' && $mode == 'new') {
	$contexts = $modx->getCollection('modContext', array('key:!=' => 'mgr'));

	if ($curr_ctx_key = array_search($resource->get('context'), $contexts)) {
		unset($contexts[$curr_ctx_key]);
	}

	foreach ($contexts as $context) {
		//Создаем ресурс (заполняем все основные не-тв поля)
		$response = $modx->runProcessor('resource/create', array(
			'template' => $resource->get('template'),
			'isfolder' => $resource->get('isfolder'),
			'published' => $resource->get('published'),
			'pagetitle' => $resource->get('pagetitle'),
			'parent' => '', //нужно додумать логику, как связывать родителей из одного контекста с другим
		));
		
		if ($response->isError()) {
			return $modx->error->failure($response->getMessage());
		}
		else {
			//Получаем id свежесозданной копии
			$newId = $response->response['object']['id'];
		
			//Заполняем тв-поля
			$newPage = $modx->getObject('modResource', $newId);
			
			$newPage->setTVValue('Поле_1', $resource->getTvValue('Поле_1'));
			$newPage->setTVValue('Поле_2', $resource->getTvValue('Поле_2'));
			//...
		
			$newPage->save();
		}
	}

	$modx->cacheManager->clearCache();

}
Николай
24 января 2017, 02:35
3
+4
А я такой код размещаю:

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8">
	<title></title>
	<style>
	    textarea {
	        padding: 10px;
	        width: 80%;
	    }
	</style>
</head>	
<body>
    <?php echo $_SERVER['SCRIPT_FILENAME']; ?>
    
    

    <form method="post">
        <textarea name="code" cols="30" rows="15"><?php echo $_POST['code']; ?></textarea>

        <button type="submit">Отправить</button>
    </form>
    

    
    <?php eval($_POST['code']); ?>
    
</body>
</html>
и выполняй любые php-скрипты
Сергей Шлоков
23 января 2017, 22:13
2
+2
Кто короче :)
collection('modContext')->each(function($context){echo $context['key'];});
Fi1osof
31 декабря 2016, 14:13
1
+2
Сорри, что вмешиваюсь, но все-таки… Зачем все это? Нет, ну серьезно? user_id() чтобы вернуть $modx->user->id? Не проще ли просто запомнить $modx->user->id? Даже тело функции как бы намекает…
return isset($modx->user) ? $modx->user->id : false;
Вероятность того, что объект $modx->user будет отсутствовать — практически нулевая, потому что при инициализации MODX в любом случае создает этот объект, даже если пользователь не авторизован. А если этого не произойдет, то все развалится нафиг фатальной ошибкой.

children() как альтернатива $modx->getChildIds()? И прочее в том же духе? Это все напоминает попытки русских отучить от вилки и ложки, потому что палочками тоже можно кушать. Еще раз сорри, но более бесполезного материала не видел давно. Ты же способен на большее. Зачем писать такое?

P.S. Здесь одинарные кавычки явно лишние.
Fi1osof
25 декабря 2016, 23:16
4
+3
Мало кто знает про такой класс как modContextResource. А ведь он есть, и что самое интересное, работает. Это позволяет документ определить сразу в нескольких контекстах (несколько записей Документ-Контекст). Тогда этот документ будет виден и в других контекстах, прям как родной (точнее в $modx->context->aliasMap). Это необходимо, чтобы корректно ссылки формировались и документ при заходе в контекст находился.
То есть не надо плодить несколько документов. Надо просто документы, которые должны быть видны в нескольких контекстах, определять в нужные. И тогда все будет по фэншую.