Видео-туториал: админка компонента для 2.0

+37
2.56K
r2
Привет, друзья

В прошлом туториале мы написали компонент, теперь напишем админку для него.

Часть 1

Часть 2

0
Реклама Реклама #
+2
r2 r2 7 лет назад #
Подписывайтесь на канал на youtube чтобы не пропустить следующие выпуски
+2
My-InstantCMS.Ru My-InstantCMS.Ru 7 лет назад #
Спасибо
0
NeBox NeBox 7 лет назад #
Спасибо за видео.

Возникли вопросы.
- Почему файлы компонента не объединили в одной директории? Не удобно, что все они раскиданы.

- Файлы шаблона админки расположены в директории шаблона сайта. При переименовании или удалении невозможно будет попасть вообще на сайт и в админку в частности.

- Установщика компонентов нет. Т.е. залил я компонент, но без добавления компонента в БД я его в списках не увижу. Соответственно, либо давать файл с запросами, либо писать какой-то установщик...
Почему бы не реализовать более удобное управление? Класть в директорию компонента какой-то файл типа component.xml в котором будет его описание, и тогда уже инициализировать их в списке. Добавить кнопку Установить и соответственно какой-то файл install.php в котором уже будет класс установщика, где определить какой-то метод, например actionInstall в котором уже описать запросы к БД или что угодно, аналогично создать и actionUninstall(для удаления) и actionStatus(для включения\выключения). Это уже избавит юзера от лишних телодвижений.

имхо.
+2
r2 r2 7 лет назад #
1. Файлы компонента в одной директории. Отдельно только языковые файлы и шаблоны, потому что они могут распространяться отдельно.

2. Разные шаблоны сайта (темы) могут иметь разные дизайны админки. Поэтому шаблоны админки - это часть темы, а не компонента.

3. Кто сказал что установщика компонентов нет? Про него я еще не рассказывал.
0
NeBox NeBox 7 лет назад #
1 - Чем файлы сложенные в одной папке помешают распространять отдельно темы и языки?
Просто не привычно как-то, что не в одном месте все.

2 - Я понял, что можно менять шаблон админки. Просто не понятно зачем)

3 - Вы про установщик admin/install или какой-то другой?
+1
r2 r2 7 лет назад #
1. Тех, кто делает шаблоны, гораздо больше чем тех, кто делает компоненты. Им должно быть удобнее.
Также, шаблоны это не только .tpl.php, это еще css и картинки, т.е. статика. И статику в ряде случаев гораздо предпочтительнее иметь в одном общем месте, чем размазанной по папке system, где должен быть только рабочий код. Теоретически, данный подход может вообще позволить вынести папку system за пределы document root, что очень полезно для безопасности. Так что в этой папке не должно быть никаких файлов, доступных извне. И в ней уже сейчас лежит .htaccess с Deny From All внутри.
Да и вообще, я не вижу никаких особых проблем в том, чтобы один раз открыть файлы шаблонов в редакторе. Потом с ними спокойно работаешь просто переключаясь между вкладками.

2. Задачи бывают разные.

3. Да, про него. В 2.0 нет кучи разных установщиков. Есть один, который умеет все. Как с ним работать я расскажу в отдельном видео.
0
NeBox NeBox 7 лет назад #
3 - я про это и писал, что невозможно установить компонент не прогоняя его через установщик. просто залить и включить нельзя, так как компонент никак не определяется пока не будет добавлена запись о нем в БД.

1 - согласен.
+1
r2 r2 7 лет назад #
Просто залить и включить нельзя, потому что это противоречит текущей идеологии.
Сейчас установка всех дополнений должна происходить через админку.
Пользователю удобнее выбрать zip-файл в админке, чем самому распихивать файлы по папкам.
-1
NeBox NeBox 7 лет назад #
Для удобства добавления компонентов, тогда было бы неплохо в админке иметь возможность установить их "по клику".
Как в wp реализовано, сразу с сайта icms
-4
Dublic Dublic 7 лет назад #
Без претензий! Надо установщик? Напиши его! Что тебе мешает это сделать? В Видео все разжовано, дополнительно читай php.net и делай себе и другим установщик.
+3
NeBox NeBox 7 лет назад #
Мы на ТЫ не переходили.
Я что, просил написать установщик? Я задавал вопросы - зачем и почему.
Мне, как разработчику, например, многое не понятно в логике реализации некоторого функционала. Я бы делал иначе, по этому и решил спросить.
0
My-InstantCMS.Ru My-InstantCMS.Ru 7 лет назад #
r2, будет ли в двойке Плагина и Фильтры, как на первой ветке? То есть есть несколько маленькие разработки, но не хочется для этого создать компонент (пока что могу создать только компонент)
0
r2 r2 7 лет назад #
Нет, есть только контроллеры (компоненты). Думаю нет ничего страшного в том, что некоторые из них будут небольшими.
0
Александр Kreator Александр Kreator 7 лет назад #
Есть уже те, кто смог повторить, то что на видео? 1:1
Если не жалко - выложите исходники.
Я конечно понимаю, что если самому все с 0 собрать - то в голове больше отложится, но по временным соображениям не представляю когда это случится ...
Спасибо.
0
imprint imprint 7 лет назад #
Всем привет, есть подвижки для разработки инстантШопа? под 2 ветку
0
imprint imprint 7 лет назад #
И еще вопрос, как организовать форму обратной связи? Заранее спасибо.
0
maxisoft maxisoft 7 лет назад #
Посмотрев все видео, могу сказать огромный респект R2, действительно все очень хорошо изложено, и доступно для простых смертных. v

Единственный вопрос который меня немного терзает, это какие были причины, для разделения в форме полей items и generator ?
Логичнее было бы иметь одну точку входа items и сделать просто проверку на тип значения, массив или функция. Или я что то упустил?
0
r2 r2 7 лет назад #
Можно было и проверять, но почему-то сделал вот так) Особых причин нет.
0
My-InstantCMS.Ru My-InstantCMS.Ru 7 лет назад #
r2, подскажите пожалуйста, как в админку компонента, создать свои страницы, по мимо options и perms, тоесть я создаю actionCats() и просто echo '123'; выводиться, но как мне обращаться к модели? $this->model не работает, и незнаю как там указать файл шаблона во фронтенде это было с помощью $template
0
Крот Крот 7 лет назад #
r2, тоже есть вопрос - подскажите, а по какой причине во второй ветке используется InnoDB?
0
lokanaft lokanaft 7 лет назад #
Раз уж говорим об оптимизации бд, то надо вынести из контентных таблиц поля по типу comments и rating в отдельные, дабы кэш запросов у самой бд не сбрасывался.
0
maxisoft maxisoft 7 лет назад #
и куда их вынести? в отдельную таблицу и сделать join? Не совсем понятно что тогда будем оптимизировать.
0
lokanaft lokanaft 7 лет назад #
Нет. На выборку итемов свой запрос, на счётчики - свои. В идеале надо делать без джоинов.
0
maxisoft maxisoft 7 лет назад #
Так согласен, действительно будет быстрее на больших таблицах, плюс если юзать PDO с препаред запросами будет еще быстрее :)
0
Крот Крот 7 лет назад #
1) в cms пока еще нет поддержки транзакций и триггеров - а innodb вполне позволяет
а) удалить строку из таблицы(статью например) и триггером удалить все связанное с ним (комменты, голоса и т.п.)
б) откатить добавление из других таблиц - если вдруг нашлась ошибка и т.п.
2) innodb быстрее пишет, myisam - быстрее читает - у меня записи к чтению 1 к 20 максимум. у других думаю аналогично
в myisam будет все быстрее работать
3) foreign keys тоже нет - см. п.1
4) innodb надежнее - у вас БД часто падало? - у меня ни разу - пока сам не уронил)
5) в innodb нет fullsearch index - пока ничего не могу сказать
6) innodb - более новая система - это да, не поспоришь

получается причина №6 (и наверное 5)
еще может быть причиной то, что innodb блокирует только строку в таблице, а не всю таблицу - но это какая посещаемость должна быть, что бы этим пользоваться
0
lokanaft lokanaft 7 лет назад #
У меня раз была таблица с миллионом строк и весила 50гб на myisam zst Выборка последнего листа по LIMIT занимала 40 сек. А по ключевому индексу вообще мгновенно любая строка и даже несколько через IN. Оно даже начало активно индексироваться и не падало при этом. Но потом позвонили с хостинга и попросили уменьшить размер бд)
0
maxisoft maxisoft 7 лет назад #
Видео снято отменно, но возник вопрос на который не как не могу получить ответ - как можно сделать в компоненте свое дерево категории, вроде как в системе не нашел ничего чтобы это позволяло делать. Если нужно писать все самому, просто ответите чтобы не ломал голову и буду ваять свои классы для этого.
-1
Крот Крот 7 лет назад #
content_tree_ajax.php не?
и в нем
$items = $content_model->getSubCategoriesTree($ctype['name'], $parent_id);

ну и на фронте

jquery.dynatree в datatree.js
0
maxisoft maxisoft 7 лет назад #
а причем тут контент, я же не спросил как сделать в новом типе контента, а речь идет про отдельный компонент (контролер) например Фриланс биржа.
0
r2 r2 7 лет назад #
в базовом классе cmsModel есть множество методов для работы с категориями ( getRootCategory, getCategory, getCategoriesTree, addCategory и др.)
их реализацию можно посмотреть в /core/classes/model.php
из кода станет понятно как их использовать (с какими аргументами вызывать)
0
maxisoft maxisoft 7 лет назад #
Огромное спасибки, побежал курить код.
0
Скорпион Скорпион 7 лет назад #
hoho hoho scratch
И эту часть учебника я таки одолел. dance
Если сказать что данные видео-уроки супер - это значить ничего не сказать. По мне, в таком виде лучше воспринимается материал, чем сухой текст в документации. А допускаемые уважаемым r2 ошибки, не только не мешают, а наоборот помогают понять как их искать и справлять.
Вообщем сейчас сяду за "урок по инсталлятору", хотя бегло я его уже просмотрел.
А по данному уроку есть вопросец.
Я правильно понял (причем этого нет даже в выложенных исходниках урока), что не были реализованы следующие функции для назначенного админа фотобитвы:
- удаление фотографии (action/photo_delete.php);
- запуск и остановка модерируемой фотобитвы (action/stop.php и action/start.php)
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.