Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Как обратится к функциям Controller или Model с файла лежащего в корне или в другой папке


Recommended Posts

Подробно напишите какая задача.

 

Задача следующая: необходимо с файла лежащего к примеру ./pay/pay.php обратится к функции update() лежащей в файле ./catalog/model/checkout/order.php. Файл pay.php это обработчик, т.е. после обращения к этому файлу скажем: http://test.ru/pay/pay.php необходимо занести коммент к заказу, что делает функция update(). Спасибо!

Надіслати
Поділитися на інших сайтах


Примерно как-то так...

 

// Ищем и подключаем файл с классом

if (file_exists('путь к файку' . 'order.php')) {
    require_once('путь к файку' . 'order.php');
}

 

// создаём новый объект класса

$my = new ModelCheckoutOrder(параметры если нужны);

 

..................

//что-то делаем

$my->update(параметры);

.................

// уничтожаем переменную

unset($my);

=========================

 

Ну и дальше уже смотреть по ситуации.

 

Можно предварительно конфиг движка подключить, чтобы доступ к константам путей иметь. Можно ./pay/pay.php сделать в виде класса, который будет наследоваться от стандартного класса контроллера движка (Controller), тем самым наследуя функционал контроллера.

 

В общем дальше уже от конкретной реализации зависит и там уже просто знание PHP нужно и знание ООП в PHP

Надіслати
Поділитися на інших сайтах

ага. и еще куча связей.

проще вынести несколько необходимых классов, измененных до нужного уровня, (в том числе DB), в свой файл и не привязываться к файлам движка.

 

потому и ответ мой был "никак".

ибо оно того не стоит.

Надіслати
Поділитися на інших сайтах

Если это обработчик оплаты, то почему бы не сделать платежным модулем?

Посмотрите директорию /catalog/controller/payment/, примеров там куча

Простейший случай /catalog/controller/payment/pay.php:

<?php
class ControllerPaymentPay extends Controller {
  public function index() {
    /* ваш код */
    $this->load->model('checkout/order');
    $this->model_checkout_order->update(/* данные для обновления */);
  }
}

Вызываться это будет не http://test.ru/pay/pay.php, а http://test.ru/index.php?route=payment/pay

  • +1 2
Надіслати
Поділитися на інших сайтах


Все ребята спасибо разобрался. Получилось следуещее:

Два файла pay.php и payController.php

Листинг pay.php:

<?


if (file_exists('../../config.php')) {
    require_once('../../config.php');
} else {echo 'Не удалось найти файл конфигурации'; exit;}


// Startup
require_once(DIR_SYSTEM . 'startup.php');


// Application Classes
require_once(DIR_SYSTEM . 'library/customer.php');
require_once(DIR_SYSTEM . 'library/affiliate.php');
require_once(DIR_SYSTEM . 'library/currency.php');
require_once(DIR_SYSTEM . 'library/tax.php');
require_once(DIR_SYSTEM . 'library/weight.php');
require_once(DIR_SYSTEM . 'library/length.php');
require_once(DIR_SYSTEM . 'library/cart.php');
require_once(DIR_SYSTEM . 'library/taobao.php');
require_once(DIR_SYSTEM . 'library/translator.php');
require_once(DIR_SYSTEM . 'library/bingtranslator.php');
// Registry
$registry = new Registry();


// Loader
$loader = new Loader($registry);
$registry->set('load', $loader);


// Config
$config = new Config();
$registry->set('config', $config);


// Database 
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set('db', $db);


// Store
if (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) {
$store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`ssl`, 'www.', '') = '" . $db->escape('https://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
} else {
$store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`url`, 'www.', '') = '" . $db->escape('http://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
}


if ($store_query->num_rows) {
$config->set('config_store_id', $store_query->row['store_id']);
} else {
$config->set('config_store_id', 0);
}


// Settings
$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC");


foreach ($query->rows as $setting) {
if (!$setting['serialized']) {
$config->set($setting['key'], $setting['value']);
} else {
$config->set($setting['key'], unserialize($setting['value']));
}
}


if (!$store_query->num_rows) {
$config->set('config_url', HTTP_SERVER);
$config->set('config_ssl', HTTPS_SERVER); 
}


// Url
$url = new Url($config->get('config_url'), $config->get('config_use_ssl') ? $config->get('config_ssl') : $config->get('config_url')); 
$registry->set('url', $url);


// Log 
$log = new Log($config->get('config_error_filename'));
$registry->set('log', $log);


function error_handler($errno, $errstr, $errfile, $errline) {
global $log, $config;


switch ($errno) {
case E_NOTICE:
case E_USER_NOTICE:
$error = 'Notice';
break;
case E_WARNING:
case E_USER_WARNING:
$error = 'Warning';
break;
case E_ERROR:
case E_USER_ERROR:
$error = 'Fatal Error';
break;
default:
$error = 'Unknown';
break;
}


if ($config->get('config_error_display')) {
echo '<b>' . $error . '</b>: ' . $errstr . ' in <b>' . $errfile . '</b> on line <b>' . $errline . '</b>';
}


if ($config->get('config_error_log')) {
$log->write('PHP ' . $error . ':  ' . $errstr . ' in ' . $errfile . ' on line ' . $errline);
}


return true;
}


// Error Handler
set_error_handler('error_handler');


// Request
$request = new Request();
$registry->set('request', $request);


// Response
$response = new Response();
$response->addHeader('Content-Type: text/html; charset=utf-8');
$response->setCompression($config->get('config_compression'));
$registry->set('response', $response); 


// Cache
$cache = new Cache();
$registry->set('cache', $cache); 


// Session
$session = new Session();
$registry->set('session', $session); 


// Language Detection
$languages = array();


$query = $db->query("SELECT * FROM " . DB_PREFIX . "language"); 


foreach ($query->rows as $result) {
$languages[$result['code']] = $result;
}


$detect = '';


if (isset($request->server['HTTP_ACCEPT_LANGUAGE']) && ($request->server['HTTP_ACCEPT_LANGUAGE'])) { 
$browser_languages = explode(',', $request->server['HTTP_ACCEPT_LANGUAGE']);


foreach ($browser_languages as $browser_language) {
foreach ($languages as $key => $value) {
if ($value['status']) {
$locale = explode(',', $value['locale']);


if (in_array($browser_language, $locale)) {
$detect = $key;
}
}
}
}
}


if (isset($request->get['language']) && array_key_exists($request->get['language'], $languages) && $languages[$request->get['language']]['status']) {
$code = $request->get['language'];
} elseif (isset($session->data['language']) && array_key_exists($session->data['language'], $languages)) {
$code = $session->data['language'];
} elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages)) {
$code = $request->cookie['language'];
} elseif ($detect) {
$code = $detect;
} else {
$code = $config->get('config_language');
}


if (!isset($session->data['language']) || $session->data['language'] != $code) {
$session->data['language'] = $code;
}


if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) { 
setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $request->server['HTTP_HOST']);
} 


$config->set('config_language_id', $languages[$code]['language_id']);
$config->set('config_language', $languages[$code]['code']);


// Language 
$language = new Language($languages[$code]['directory']);
$language->load($languages[$code]['filename']); 
$registry->set('language', $language); 


// Document
$document = new Document();
$registry->set('document', $document);  


// Customer
$registry->set('customer', new Customer($registry));


// Affiliate
$affiliate = new Affiliate($registry); 
$registry->set('affiliate', $affiliate);


if (isset($request->get['tracking']) && !isset($request->cookie['tracking'])) {
setcookie('tracking', $request->get['tracking'], time() + 3600 * 24 * 1000, '/');
}


// Currency
$registry->set('currency', new Currency($registry));


// Tax
$tax = new Tax($registry);
$registry->set('tax', $tax);


// Weight
$registry->set('weight', new Weight($registry));


// Length
$registry->set('length', new Length($registry));


// Cart
$registry->set('cart', new Cart($registry));


// Front Controller 
$controller = new Front($registry);




require_once('payController.php');




$payProvider = new ControllerPayProvider($registry);


echo $payProvider->index();








?>

В общем взял почти все с файла index.php кроме вывода (это позволило мне пользоваться функционалом класса Controller)

 

Ну и непосредственно сам класс в файле payController.php:

<?php
class ControllerPayProvider extends Controller {
public function index() {
/* ваш код */
$this->load->model('checkout/order');
$this->model_checkout_order->update(/* данные для обновления */);
}
}
Надіслати
Поділитися на інших сайтах


Я же написал как правильно сделать, не превращайтке свою работу в говнокод, тем более, что времени займет не больше 2 минут:

pay.php - лишний

payController.php переименовать в payprovider.php, положить в /catalog/controller/payment/ и вызывать как /index.php?route=payment/payprovider

  • +1 2
Надіслати
Поділитися на інших сайтах


Да уж... Большой и ненужный копипаст. По сути, /index.php продублировали

Надіслати
Поділитися на інших сайтах

Вы не понимаете смысл созданной темы необходимо чтоб файл лежал не в /catalog/controller/payment/, а именно в корне к примеру /pay/pay.php и при всем этом в сылке не должны присутствовать другие get переменные. Потому что к файлу pay.php будет обращатся не пользователь а платежная система. В связи с изложеным, поставленная задача решена, а если есть предложение по поводу оптимизации кода и прочего, излагайте буду рад почитать. Но в любом случае спасибо за обсуждение данной темы, без критики не будет и прогресса)))

Надіслати
Поділитися на інших сайтах


А так?

.htaccess:

RewriteRule ^payprovider/$ index.php?route=payment/payprovider [L,QSA] 

/catalog/controller/payment/payprovider.php:

<?php
class ControllerPayProvider extends Controller {
  public function index() {
    print_r($_GET);
  }
}

http://site.ru/payprovider/?test=1

Надіслати
Поділитися на інших сайтах


А так?

.htaccess:



RewriteRule ^payprovider/$ index.php?route=payment/payprovider [L,QSA] 

/catalog/controller/payment/payprovider.php:



<?php
class ControllerPayProvider extends Controller {
  public function index() {
    print_r($_GET);
  }
}

http://site.ru/payprovider/?test=1

 

 

Отличный вариант приму во внимание)) Только в моем случае мне было необходимо чтоб файл лежал в папке pay

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.