Автор Тема: Как научиться делать магазин самому?  (Прочитано 1083 раз)

23 Февраля 2014, 21:46:21
  • Новичок
  • *
  • Сообщений: 25
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вопрос конечно слишком общий. Но ситуация такая - хочу научиться программированию. фактически с нуля. И в дальнейшем развиваться в этом направлении. Выбрал пока что ветку развития веб-программирования. Какое-то общее понимание программирования еще со школы есть.
 Интересно направление интернет-магазинов. Есть свой магазин. Мы его так и не довели до ума. Поэтому моя цель доделать его самому и раскрутить в яндексе, т.е. еще и сео хочу освоить.
 Я так понял мне нужно изучить html css JavaScript PHP. Собственно этим и занимаюсь. прочитал самоучители по первым трем, делаю практикум на сайте htmlbook.ru по верстке (html/css). Слушаю курс по JavaScript, но в нем нет практики.
 Так вот вопрос мой к опытным - какой путь посоветовали бы новичку. Каким путем идит чтобы в наикратчайшие сроки:
1. доверстать как захочу и настроить свой сайт (он сделан на престе, поэтому тут и пишу). Поднять его максимально в яндексе/гугле
2. начать зарабатывать первые деньги в веб программировании (я так понимаю, можно начать с верстки)

 Какие книги/курсы порекомендуете? Какие практикумы? У меня вообще есть конечно какой-то план в голове. Но может кто-то сможет мне дать подсказку - каким наикратчайшим путем прийти к этим двум пунктам? А дальше уже понятнее будет
23 Февраля 2014, 22:01:45
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33028
  • Репутация: +26761/-0
    • Просмотр профиля
Начни делать свой сайт. Делай все сам. Вот это самый краткий путь.
Смотри примеры, готовые сайты на prestashop. Для новичка лучше prestashop нет. Легкий и понятный.
Чтобы нормально развиваться в вебпрограммировании, учи php. Не только верстку и js.   
28 Февраля 2014, 13:27:26
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 843
  • Репутация: +78/-0
    • Просмотр профиля
Я постоянно работаю с магазинами, наполняю их, делаю дизайн и думала так же как и вы начать делать сама от А до Я сама,
Это совсем не легко, как кажется на первый взгляд, там столько подводных камней. Надо иметь большое упорство и способность работать самостоятельно,разбираться с ощибками и кодами. Я пыталась, не смогла.
11 Марта 2014, 00:48:30
Ответ #3
  • Новичок
  • *
  • Сообщений: 25
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Надеюсь, получится. но уже чувствую, что будет непросто. Более менее освоил верстку, азы JS и начал jQuery. Посмотри, что будет
11 Мая 2014, 15:32:09
Ответ #4
  • Новичок
  • *
  • Сообщений: 25
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Продолжаю подучивать ПХП и хочу перейти к изучению самой престы С чего лучше начать? Я только на простых примерах понял что такое MVC модель, но как она реализована в престе мне сложно понять т.к. она большая. Доки на сайте немного почитал но developer guide мне мало что объясняет т.к. там мало подробной инфы.
Решил что начну с оформления сайта. Тема я понял лежит в themes. Smarty я тоже азы прочитал посмотрел. Но захожу тупо в первый файл темы index И вижу там {$HOOK HOME}. И мне это ничего не дает. Переменная HOOK а что она из себя представляет где задана, куда лезть не знаю.
1) Как начинающему нубу понять работу хуков целиком и полностью? Может инфа какая-то есть или здесь сможете объяснить
2) И как вообще начинать изучать престу? Хочу понять какой класс как работает. Структуру MVC - т.е. какой файл что запускает. В простом виде ведь заходишь в index.html - там инклудятся нужные файлы которые делают запросы в бд, далее инклудятся html страницы. Тут же все сложнее намного и я в замешательстве )
11 Мая 2014, 21:59:05
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33028
  • Репутация: +26761/-0
    • Просмотр профиля
Начинать я азов нужно.
Система хуков, это просто определение мест для подхвата сторонних файлов php и к mvc не имеет отношения.

Техническая архитектура PrestaShop
PrestaShop основан на архитектуре клиент-серверного приложения (3 tier architecture)
1. Объект / данные.
Доступ к базе данных контролируется с помощью файлов в папке "classes".
2. Управление данными.
Контент для пользователей формируется файлами контроллеров, которые находяться в корневой папке сайта.
3.  Дизайн.
Все файла темы находятся в папке "themes".

Это тот же принцип, как в Model-View-Controller (MVC) архитектуры, только в упрощенной форме.
11 Мая 2014, 23:56:17
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 13635
  • Репутация: +14563/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Hooks in PrestaShop 1.5
Хуки хорошо описаны в оф.документации.

Начинать нужно с изучения вот этого
Diving into PrestaShop Core development
Класс ObjectModel один из основных.
Dispatcher - основа для url сайта.
FrontController и AdminController основные классы контроллеров.
От этих классов и нужно отталкиваться.
12 Мая 2014, 00:15:13
Ответ #7
  • Новичок
  • *
  • Сообщений: 25
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Видел такую фичу в разных IDE "Переход к объявлению". Загрузил папку с престой как объект и в phpStrom и в NetBeans - ни там ни там не переходит к месту объявлени функций или переменных. Может, кто юзал эти IDE и знает в чем дело? Как это вообще работает. Нашел ответ на похожий вопрос по laravel. там, как я понял, отдельный файл, где описана структура проекта, по которой ide уже ориентируется. Но я не уверен что это так
12 Мая 2014, 00:18:52
Ответ #8
  • Новичок
  • *
  • Сообщений: 25
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Hooks in PrestaShop 1.5
Хуки хорошо описаны в оф.документации.

А в какой файл заглянуть чтобы понять что значит надпись ($HOOK_HOME} - где этой переменной смарти передается какое-то значение?

Еще вот заметил, что FrontController extends Controller. Но в файле Controller.php объявляется класс с совсем другим название ControllerCore. Это считается одним и тем же? если да, то почему?

UP: Итак сегодня еще чуть пококвыряв в стандартной теме в файле header.tpl я просто ради интереса закомментил html тегами вот это:
<div id="left_column" class="column grid_2 alpha">
{$HOOK_LEFT_COLUMN}
</div>

Тэг смарти  не закомментился. И на странице контент левой колонки остался, но его расположение съехало. Т.е. в {$HOOK_LEFT_COLUMN} содержится контент левой колонки. но в каком файле и как он гененрируется?
12 Мая 2014, 10:16:00
Ответ #9
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33028
  • Репутация: +26761/-0
    • Просмотр профиля
Чтобы было понятно, нужно почитать про наследование классов.
class FrontControllerCore extends ControllerБазовый класс Controller находиться в той-же папке. На "Core" не обращаем внимание, это указание, что это классы ядра prestashop.

Хук можно считать переменной, объектом. Объявления хуков искать просто. Поиск по содержимому файлов выдаст все объявление этих переменных. Или же создать проект к IDE, eclipse, phpstorm и т.д., и там можно смотреть место объявления переменных.
Можно облегчить поиск, так как объяаления переменных и констант должны быть в классах и конроллерах, которые формируют содержимое страницы. Так для index.tpl - это IndexController.
class IndexControllerCore extends FrontController
{
        public function initContent()
{
parent::initContent();

$this->context->smarty->assign('HOOK_HOME', Hook::exec('displayHome'));
$this->setTemplate(_PS_THEME_DIR_.'index.tpl');
}
 
файл /classes/controller/IndexController.php.
Объекту "$this->context->smarty" присваивается значение возвращаемое методом exec('displayHome') класса Hook. Далее смотри этот метод, что он делает и как.
Так и разберешься.
12 Мая 2014, 13:52:35
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 13635
  • Репутация: +14563/-1
  • Сообщество PrestaShop
    • Просмотр профиля
12 Мая 2014, 18:19:55
Ответ #11
  • Новичок
  • *
  • Сообщений: 25
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля

Мда... Тем временем пока я ковырялся все пошло прахом.
http://wildskin.ru/ - это мой сайт. Насколько я помню я ничего не делал кроме того что пытался вставить видео с ютуба и менял языки магазина. Есть идеи что с ним могло произойти? Картинок только пару осталось. Все остальное пропало и куча lorem ipsum
12 Мая 2014, 22:59:58
Ответ #12
  • Новичок
  • *
  • Сообщений: 25
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Базовый класс Controller находиться в той-же папке. На "Core" не обращаем внимание, это указание, что это классы ядра prestashop.

Все равно не догоняю. вот есть файл classes\Dispatcher.php. В нем объявляется класс DispatcherCore. А в методе getInstance, который как я понимаю и создает объект Dispatcher, пишется

self::$instance = new Dispatcher();
почему не так?:

self::$instance = new DispatcherCore();
ведь что пхп вызывает когда видит new Dispatcher() ? Должно выдать ошибку undefined class в моем понимании

С классом Controller я еще могу понять. Там есть файл tools/profiling/controller.php в котором Controller extends ControllerCore А ControllerCore в свою очередь находится в папке classes.

 С диспатчером же не вижу логики. не срастается цепочка. И это, как я понял, касается не только диспатчера.
13 Мая 2014, 10:38:26
Ответ #13
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33028
  • Репутация: +26761/-0
    • Просмотр профиля
Первыми вызываются файлы конфиг. из папки config.
Потом загружается класс Autoload.
require_once(dirname(__FILE__).'/alias.php');
require_once(dirname(__FILE__).'/../classes/Autoload.php');
spl_autoload_register(array(Autoload::getInstance(), 'load'));
В нем определены методы вызова классов.
public function load($classname)
{
// Smarty uses its own autoloader, so we exclude all Smarty classes
if (strpos(strtolower($classname), 'smarty_') === 0)
return;
// regenerate the class index if the requested file doesn't exists
if ((isset($this->index[$classname]) && $this->index[$classname] && !is_file($this->root_dir.$this->index[$classname]))
|| (isset($this->index[$classname.'Core']) && $this->index[$classname.'Core'] && !is_file($this->root_dir.$this->index[$classname.'Core'])))
$this->generateIndex();
// If $classname has not core suffix (E.g. Shop, Product)
if (substr($classname, -4) != 'Core')
{
// If requested class does not exist, load associated core class
if (isset($this->index[$classname]) && !$this->index[$classname])
{
require($this->root_dir.$this->index[$classname.'Core']);
// Since the classname does not exists (we only have a classCore class), we have to emulate the declaration of this class
$class_infos = new ReflectionClass($classname.'Core');
eval(($class_infos->isAbstract() ? 'abstract ' : '').'class '.$classname.' extends '.$classname.'Core {}');
}
else
{
// request a non Core Class load the associated Core class if exists
if (isset($this->index[$classname.'Core']))
require_once($this->root_dir.$this->index[$classname.'Core']);
if (isset($this->index[$classname]))
require_once($this->root_dir.$this->index[$classname]);
}
}
// Call directly ProductCore, ShopCore class
else
require($this->root_dir.$this->index[$classname]);
}
По слову Core определяются базовые классы.
13 Мая 2014, 13:05:53
Ответ #14
  • Ветеран
  • *****
  • Сообщений: 13635
  • Репутация: +14563/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Первыми вызываются файлы конфиг. из папки config.
Потом загружается класс Autoload.
Это обращение к файлу index.php.
require(dirname(__FILE__).'/config/config.inc.php');
Dispatcher::getInstance()->dispatch();
Подключаются файлы: config.inc.php, defines.inc.php, settings.inc.php и autoload.php
// Include some alias functions
require_once(dirname(__FILE__).'/alias.php');
require_once(dirname(__FILE__).'/../classes/Autoload.php');

spl_autoload_register(array(Autoload::getInstance(), 'load'));
После этого в Prestashop все запросы (для фронтэнда) идут на Front Controller. Этот конроллер используется для:
- Приема данных браузера и передачи их другим классам/контроллерам;
- Определение контроллера и метода при помощи роутеров;
- Отображение запрошенных браузером данных, при помощи шаблонов и модулей.
Перед началом обработки запроса создается и инициализируется объект и вызываются методы класса/контроллера отвественного за обработку данных.
В документации есть описание методов и порядок вызова.
http://doc.prestashop.com/display/PS15/Diving+into+PrestaShop+Core+development