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'}
Подумал, что нужно как то вместе использовать.
PG
PG
30 января 2017, 07:18
1
+1
Как вариант:
$id = 250; //id товара
$size = $id."/320x480/"; // размер превью
$rank = 0; //порядковый номер 
if ($r = $modx->getObject('msProductFile',array('product_id'=>$id, 'path'=>$size,'rank'=>$rank))){
    echo $r->get('url');   
} else {
    echo 'нет такого';
}
Максим Кузнецов
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. Здесь одинарные кавычки явно лишние.