rovers Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 Приветствую всех гуру! Подскажите как с файла лежащего к примеру www/file.php обратится к функциям контроллера и модели? Заранее благодарен)) Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 никак. Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 Подробно напишите какая задача. Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 24 серпня 2013 Автор Share Опубліковано: 24 серпня 2013 Подробно напишите какая задача. Задача следующая: необходимо с файла лежащего к примеру ./pay/pay.php обратится к функции update() лежащей в файле ./catalog/model/checkout/order.php. Файл pay.php это обработчик, т.е. после обращения к этому файлу скажем: http://test.ru/pay/pay.php необходимо занести коммент к заказу, что делает функция update(). Спасибо! Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 Примерно как-то так... // Ищем и подключаем файл с классом if (file_exists('путь к файку' . 'order.php')) { require_once('путь к файку' . 'order.php');} // создаём новый объект класса $my = new ModelCheckoutOrder(параметры если нужны); .................. //что-то делаем $my->update(параметры); ................. // уничтожаем переменную unset($my); ========================= Ну и дальше уже смотреть по ситуации. Можно предварительно конфиг движка подключить, чтобы доступ к константам путей иметь. Можно ./pay/pay.php сделать в виде класса, который будет наследоваться от стандартного класса контроллера движка (Controller), тем самым наследуя функционал контроллера. В общем дальше уже от конкретной реализации зависит и там уже просто знание PHP нужно и знание ООП в PHP Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 ага. и еще куча связей. проще вынести несколько необходимых классов, измененных до нужного уровня, (в том числе DB), в свой файл и не привязываться к файлам движка. потому и ответ мой был "никак". ибо оно того не стоит. Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 Если это обработчик оплаты, то почему бы не сделать платежным модулем? Посмотрите директорию /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 2 Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 25 серпня 2013 Автор Share Опубліковано: 25 серпня 2013 Все ребята спасибо разобрался. Получилось следуещее: Два файла 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(/* данные для обновления */); } } Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 25 серпня 2013 Share Опубліковано: 25 серпня 2013 Я же написал как правильно сделать, не превращайтке свою работу в говнокод, тем более, что времени займет не больше 2 минут: pay.php - лишний payController.php переименовать в payprovider.php, положить в /catalog/controller/payment/ и вызывать как /index.php?route=payment/payprovider 2 Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 Да уж... Большой и ненужный копипаст. По сути, /index.php продублировали Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 Вы не понимаете смысл созданной темы необходимо чтоб файл лежал не в /catalog/controller/payment/, а именно в корне к примеру /pay/pay.php и при всем этом в сылке не должны присутствовать другие get переменные. Потому что к файлу pay.php будет обращатся не пользователь а платежная система. В связи с изложеным, поставленная задача решена, а если есть предложение по поводу оптимизации кода и прочего, излагайте буду рад почитать. Но в любом случае спасибо за обсуждение данной темы, без критики не будет и прогресса))) Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 RewriteRule ^pay/payprovider/$ index.php?route=payment/payprovider [L,QSA] А разве в панели платежной системы нельзя указать url? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Как обратится к функциям Controller или Model с файла лежащего в корне или в другой папке Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
JohnnyVega Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 Подробно напишите какая задача. Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 24 серпня 2013 Автор Share Опубліковано: 24 серпня 2013 Подробно напишите какая задача. Задача следующая: необходимо с файла лежащего к примеру ./pay/pay.php обратится к функции update() лежащей в файле ./catalog/model/checkout/order.php. Файл pay.php это обработчик, т.е. после обращения к этому файлу скажем: http://test.ru/pay/pay.php необходимо занести коммент к заказу, что делает функция update(). Спасибо! Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 Примерно как-то так... // Ищем и подключаем файл с классом if (file_exists('путь к файку' . 'order.php')) { require_once('путь к файку' . 'order.php');} // создаём новый объект класса $my = new ModelCheckoutOrder(параметры если нужны); .................. //что-то делаем $my->update(параметры); ................. // уничтожаем переменную unset($my); ========================= Ну и дальше уже смотреть по ситуации. Можно предварительно конфиг движка подключить, чтобы доступ к константам путей иметь. Можно ./pay/pay.php сделать в виде класса, который будет наследоваться от стандартного класса контроллера движка (Controller), тем самым наследуя функционал контроллера. В общем дальше уже от конкретной реализации зависит и там уже просто знание PHP нужно и знание ООП в PHP Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 ага. и еще куча связей. проще вынести несколько необходимых классов, измененных до нужного уровня, (в том числе DB), в свой файл и не привязываться к файлам движка. потому и ответ мой был "никак". ибо оно того не стоит. Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 Если это обработчик оплаты, то почему бы не сделать платежным модулем? Посмотрите директорию /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 2 Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 25 серпня 2013 Автор Share Опубліковано: 25 серпня 2013 Все ребята спасибо разобрался. Получилось следуещее: Два файла 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(/* данные для обновления */); } } Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 25 серпня 2013 Share Опубліковано: 25 серпня 2013 Я же написал как правильно сделать, не превращайтке свою работу в говнокод, тем более, что времени займет не больше 2 минут: pay.php - лишний payController.php переименовать в payprovider.php, положить в /catalog/controller/payment/ и вызывать как /index.php?route=payment/payprovider 2 Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 Да уж... Большой и ненужный копипаст. По сути, /index.php продублировали Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 Вы не понимаете смысл созданной темы необходимо чтоб файл лежал не в /catalog/controller/payment/, а именно в корне к примеру /pay/pay.php и при всем этом в сылке не должны присутствовать другие get переменные. Потому что к файлу pay.php будет обращатся не пользователь а платежная система. В связи с изложеным, поставленная задача решена, а если есть предложение по поводу оптимизации кода и прочего, излагайте буду рад почитать. Но в любом случае спасибо за обсуждение данной темы, без критики не будет и прогресса))) Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 RewriteRule ^pay/payprovider/$ index.php?route=payment/payprovider [L,QSA] А разве в панели платежной системы нельзя указать url? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Как обратится к функциям Controller или Model с файла лежащего в корне или в другой папке Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000
rovers Опубліковано: 24 серпня 2013 Автор Share Опубліковано: 24 серпня 2013 Подробно напишите какая задача. Задача следующая: необходимо с файла лежащего к примеру ./pay/pay.php обратится к функции update() лежащей в файле ./catalog/model/checkout/order.php. Файл pay.php это обработчик, т.е. после обращения к этому файлу скажем: http://test.ru/pay/pay.php необходимо занести коммент к заказу, что делает функция update(). Спасибо! Надіслати Поділитися на інших сайтах More sharing options...
JohnnyVega Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 Примерно как-то так... // Ищем и подключаем файл с классом if (file_exists('путь к файку' . 'order.php')) { require_once('путь к файку' . 'order.php');} // создаём новый объект класса $my = new ModelCheckoutOrder(параметры если нужны); .................. //что-то делаем $my->update(параметры); ................. // уничтожаем переменную unset($my); ========================= Ну и дальше уже смотреть по ситуации. Можно предварительно конфиг движка подключить, чтобы доступ к константам путей иметь. Можно ./pay/pay.php сделать в виде класса, который будет наследоваться от стандартного класса контроллера движка (Controller), тем самым наследуя функционал контроллера. В общем дальше уже от конкретной реализации зависит и там уже просто знание PHP нужно и знание ООП в PHP Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 ага. и еще куча связей. проще вынести несколько необходимых классов, измененных до нужного уровня, (в том числе DB), в свой файл и не привязываться к файлам движка. потому и ответ мой был "никак". ибо оно того не стоит. Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 Если это обработчик оплаты, то почему бы не сделать платежным модулем? Посмотрите директорию /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 2 Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 25 серпня 2013 Автор Share Опубліковано: 25 серпня 2013 Все ребята спасибо разобрался. Получилось следуещее: Два файла 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(/* данные для обновления */); } } Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 25 серпня 2013 Share Опубліковано: 25 серпня 2013 Я же написал как правильно сделать, не превращайтке свою работу в говнокод, тем более, что времени займет не больше 2 минут: pay.php - лишний payController.php переименовать в payprovider.php, положить в /catalog/controller/payment/ и вызывать как /index.php?route=payment/payprovider 2 Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 Да уж... Большой и ненужный копипаст. По сути, /index.php продублировали Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 Вы не понимаете смысл созданной темы необходимо чтоб файл лежал не в /catalog/controller/payment/, а именно в корне к примеру /pay/pay.php и при всем этом в сылке не должны присутствовать другие get переменные. Потому что к файлу pay.php будет обращатся не пользователь а платежная система. В связи с изложеным, поставленная задача решена, а если есть предложение по поводу оптимизации кода и прочего, излагайте буду рад почитать. Но в любом случае спасибо за обсуждение данной темы, без критики не будет и прогресса))) Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 RewriteRule ^pay/payprovider/$ index.php?route=payment/payprovider [L,QSA] А разве в панели платежной системы нельзя указать url? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Как обратится к функциям Controller или Model с файла лежащего в корне или в другой папке
afwollis Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 ага. и еще куча связей. проще вынести несколько необходимых классов, измененных до нужного уровня, (в том числе DB), в свой файл и не привязываться к файлам движка. потому и ответ мой был "никак". ибо оно того не стоит. Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 Если это обработчик оплаты, то почему бы не сделать платежным модулем? Посмотрите директорию /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 2 Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 25 серпня 2013 Автор Share Опубліковано: 25 серпня 2013 Все ребята спасибо разобрался. Получилось следуещее: Два файла 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(/* данные для обновления */); } } Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 25 серпня 2013 Share Опубліковано: 25 серпня 2013 Я же написал как правильно сделать, не превращайтке свою работу в говнокод, тем более, что времени займет не больше 2 минут: pay.php - лишний payController.php переименовать в payprovider.php, положить в /catalog/controller/payment/ и вызывать как /index.php?route=payment/payprovider 2 Надіслати Поділитися на інших сайтах More sharing options... JohnnyVega Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 Да уж... Большой и ненужный копипаст. По сути, /index.php продублировали Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 Вы не понимаете смысл созданной темы необходимо чтоб файл лежал не в /catalog/controller/payment/, а именно в корне к примеру /pay/pay.php и при всем этом в сылке не должны присутствовать другие get переменные. Потому что к файлу pay.php будет обращатся не пользователь а платежная система. В связи с изложеным, поставленная задача решена, а если есть предложение по поводу оптимизации кода и прочего, излагайте буду рад почитать. Но в любом случае спасибо за обсуждение данной темы, без критики не будет и прогресса))) Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 RewriteRule ^pay/payprovider/$ index.php?route=payment/payprovider [L,QSA] А разве в панели платежной системы нельзя указать url? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
camtester Опубліковано: 24 серпня 2013 Share Опубліковано: 24 серпня 2013 Если это обработчик оплаты, то почему бы не сделать платежным модулем? Посмотрите директорию /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 2 Надіслати Поділитися на інших сайтах More sharing options...
rovers Опубліковано: 25 серпня 2013 Автор Share Опубліковано: 25 серпня 2013 Все ребята спасибо разобрался. Получилось следуещее: Два файла 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(/* данные для обновления */); } } Надіслати Поділитися на інших сайтах More sharing options...
camtester Опубліковано: 25 серпня 2013 Share Опубліковано: 25 серпня 2013 Я же написал как правильно сделать, не превращайтке свою работу в говнокод, тем более, что времени займет не больше 2 минут: pay.php - лишний payController.php переименовать в payprovider.php, положить в /catalog/controller/payment/ и вызывать как /index.php?route=payment/payprovider 2 Надіслати Поділитися на інших сайтах More sharing options...
JohnnyVega Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 Да уж... Большой и ненужный копипаст. По сути, /index.php продублировали Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 Вы не понимаете смысл созданной темы необходимо чтоб файл лежал не в /catalog/controller/payment/, а именно в корне к примеру /pay/pay.php и при всем этом в сылке не должны присутствовать другие get переменные. Потому что к файлу pay.php будет обращатся не пользователь а платежная система. В связи с изложеным, поставленная задача решена, а если есть предложение по поводу оптимизации кода и прочего, излагайте буду рад почитать. Но в любом случае спасибо за обсуждение данной темы, без критики не будет и прогресса))) Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options... rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options... camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 RewriteRule ^pay/payprovider/$ index.php?route=payment/payprovider [L,QSA] А разве в панели платежной системы нельзя указать url? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 Вы не понимаете смысл созданной темы необходимо чтоб файл лежал не в /catalog/controller/payment/, а именно в корне к примеру /pay/pay.php и при всем этом в сылке не должны присутствовать другие get переменные. Потому что к файлу pay.php будет обращатся не пользователь а платежная система. В связи с изложеным, поставленная задача решена, а если есть предложение по поводу оптимизации кода и прочего, излагайте буду рад почитать. Но в любом случае спасибо за обсуждение данной темы, без критики не будет и прогресса))) Надіслати Поділитися на інших сайтах More sharing options...
camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options...
rovers Опубліковано: 26 серпня 2013 Автор Share Опубліковано: 26 серпня 2013 А так? .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 Надіслати Поділитися на інших сайтах More sharing options...
camtester Опубліковано: 26 серпня 2013 Share Опубліковано: 26 серпня 2013 RewriteRule ^pay/payprovider/$ index.php?route=payment/payprovider [L,QSA] А разве в панели платежной системы нельзя указать url? Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts