Автор Тема: Класса "Mail" нет, но он работает.  (Прочитано 535 раз)

10 Ноябрь 2018, 16:20:26
  • Новичок
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте, пытаюсь разобраться как устроен PrestaShop.
Я пишу скрипт, который взаимодействует с движком (но не модуль) и понадобилось узнать кое какие технические детали..

Итак, допустим есть класс "Tools".
В папке "classes/" есть файл Tools.php, но класс, который там записан называется "ToolsCore", а уже класс "Tools" который основан на нём ("class Tools extends ToolsCore") располагается по адресу "tools/profiling/Tools.php".
То есть мы имеем 2 файла Tools.php. Один - "ToolsCore", второй - "Tools" и так почти для всех таких же классов.
И всё было логично пока я не столкнулся с функцией "Mail::Send()". Я сразу нашел класс "MailCore" ("classes/Mail.php"), а класс "Mail" я так найти и не смог, в папке "tools/profiling/" его нет. То же самое касается класса "Context".

Ради интереса открыл файл "cache/class_index.php" Классы Mail и Context там числятся, но в каких файлах прописаны там не указано.

При этом я точно знаю что несмотря на то что я не могу найти нужные файлы, код работает, письма отправляются и т.д.

Кто хорошо знает движок, прошу подсказать в чём хитрость ?
10 Ноябрь 2018, 18:39:53
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
У вас версия prestashop какая 1.7...?
10 Ноябрь 2018, 18:55:56
Ответ #2
  • Новичок
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
10 Ноябрь 2018, 19:14:16
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
ToolsCore - класс движка, в папке /classes/
Tools extends ToolsCore - переопределенный класс, в папке /override/classes/
и так для всех
10 Ноябрь 2018, 19:37:26
Ответ #4
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Цитировать
И всё было логично пока я не столкнулся с функцией "Mail::Send()". Я сразу нашел класс "MailCore" ("classes/Mail.php"), а класс "Mail" я так найти и не смог, в папке "tools/profiling/" его нет. То же самое касается класса "Context".
http://doc.prestashop.com/display/PS16/System+Administrator+Guide
Классы в папке /classes/
Контроллеры в папке /controllers/
Если хотите переопредить, рассширить класс/контроллер, сохраняете его в папку /override/
В папке /tools/ содержит внешние инструменты, которые были интегрированы с PrestaShop.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
11 Ноябрь 2018, 11:42:23
Ответ #5
  • Новичок
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если хотите переопредить, рассширить класс/контроллер, сохраняете его в папку /override/
Я не хочу ничего переопределять. Я всего лишь хочу узнать в каком php-файле объявлен класс Mail и Context.

Я не уточнил сразу, но скрипт котрый я пишу, работает с файлами движка, но вне движка. То есть я классы сам подключаю вручную.
11 Ноябрь 2018, 21:33:35
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 16673
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
/classes/Context.php
/classes/Mail.php
12 Ноябрь 2018, 13:55:15
Ответ #7
  • Новичок
  • *
  • Сообщений: 5
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
/classes/Context.php
/classes/Mail.php
Цитирую свой первый пост:
>>Я сразу нашел класс "MailCore" ("classes/Mail.php")

Файл Context.php тоже самое (там класс "ContextCore", а не "Context").

=========

На самом деле я уже решил проблему. Это было тяжело, но я справился.
Нужный код находился в файле "/classes/PrestaShopAutoload.php", конкретно в функции "load".

Я выложу сюда содержимое небольшого скрипта, который я написал на случай если вдруг кто-то столкнётся с такой же проблемой:

require(dirname(__FILE__).'/config/defines.inc.php');
require_once(_PS_CLASS_DIR_.'PrestaShopAutoload.php');

$classes = array(
'Core_Foundation_Database_EntityInterface',
'ObjectModel',
'Mail'
);

$PSAutoload = PrestaShopAutoload::getInstance();

foreach ($classes as $class)
{
$PSAutoload->load($class);
}

Это собственно всё.
Тему можно закрыть.
12 Ноябрь 2018, 14:25:23
Ответ #8
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
<?php
include(dirname(__FILE__).'/config/config.inc.php');
include_once(
dirname(__FILE__).'/init.php');

/*
 * свой код
 */
?>
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.