Skip to content

64j/ModxLoader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 

Repository files navigation

ModxLoader

Плагин с классом Loader

Плагин позволяет обращаться к сниппетам как через ajax так и напрямую

Для установки нужно создать плагин Loader с ниже указанным кодом на событие OnWebPageInit

require MODX_BASE_PATH.'assets/plugins/loader/plugin.loader.php';

пример вызова своего сниппета в php

$modx->load->controller('account/controller/login', $config);

'account/controller/login' - путь до нужного сниппета

$config - массив с передаваемыми параметрами


AJAX

$.ajax({
    url: 'ajax?route=account/controller/login/ajax',
    dataType: 'json',
    type: 'post',
    data: params,
    success: function(json) {

	// ваш код

    },
    error: function(xhr, ajaxOptions, thrownError) {
	alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
    }
});

PHP

Сниппеты должны придерживаться правил и находится в папке 'assets/snippets/'

AccountControllerLogin - 'account/controller/login'

<?php
class AccountControllerLogin {

	public function index() {
	
		// ваш код
		
	}
	
}
?>

Или как расширение класса Loader либо любого другого

<?php
class AccountControllerLogin extends Loader {

	public function index() {
	
		// ваш код
		
	}
	
}
?>

Рабочий код можно посмотреть в сниппете ModxAccount

PHP https://github.com/64j/ModxAccount/blob/master/account/controller/login.php

JS ajax - https://github.com/64j/ModxAccount/blob/master/account/view/login.tpl#L57




Также можно установить плагин без инклюда, описанного выше.

Установка:

Событие плагина OnWebPageInit

<?php
// OnWebPageInit

if($modx->Event->name == 'OnWebPageInit') {

	class Loader {
		private $data = array();

		public function __construct($modx) {
			$this->modx = $modx;
		}

		public function __get($key) {
			return (isset($this->data[$key]) ? $this->data[$key] : null);
		}

		public function __set($key, $value) {
			$this->data[$key] = $value;
		}

		public function controller($route, $data = array()) {
			// спасибо Agel_Nash https://github.com/AgelxNash
			$parts = explode('/', preg_replace(array(
				'/\.*[\/|\\\]/i',
				'/[\/|\\\]+/i'
			), array(
				'/',
				'/'
			), (string) rtrim($route, '/')));
			while($parts) {
				$file = MODX_BASE_PATH . 'assets/snippets/' . implode('/', $parts) . '.php';
				$class = preg_replace('/[^a-zA-Z0-9]/', '', implode('/', $parts));
				if(is_file($file)) {
					include_once($file);
					break;
				} else {
					$method = array_pop($parts);
				}
			}

			if(!isset($method)) {
				$method = 'index';
			}

			if(substr($method, 0, 2) == '__') {
				return false;
			}

			if($method == 'index' && isset($_GET['route'])) {
				$this->modx->sendRedirect($this->modx->config['site_url']);
			}

			$output = '';

			if(class_exists($class)) {
				$controller = new $class($this->modx);

				if(is_callable(array(
					$controller,
					$method
				))) {
					$output = call_user_func(array(
						$controller,
						$method
					), $data);

				} else {
					$this->modx->sendRedirect($this->modx->config['site_url']);
				}

			} else {
				$this->modx->sendRedirect($this->modx->config['site_url']);
			}

			return $output;
		}
	}

	$modx->load = new Loader($modx);
}


Для работы через ajax можно использовать Ajax метод 4 от Agel_Nash

ajax.php (создать файл в корне сайта)

<?php

define('MODX_API_MODE', true);

include_once(dirname(__FILE__) . "/index.php");

$modx->db->connect();

if (empty ($modx->config)) {
    $modx->getSettings();
}

$modx->invokeEvent("OnWebPageInit");

if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') || ($_SERVER['REQUEST_METHOD'] != 'POST')){
    $modx->sendRedirect($modx->config['site_url']);
}

header('content-type: application/json');

echo $modx->load->controller($_REQUEST['route'], $_REQUEST);

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages