Требование к системе
• Сервер Apache 2.4+
• Тип сервера баз данных MySql/Postgresql/LiteSQL
• Версия интерпретатора php 8.*.*
• OC: Widows/Linux
• Установленные модули (zip,unzip)
• Библиотеки:
1. Curl
2. XMLWriter
3. SoapClient (не обязательно)
4. PDO
5. Smtp
• Разрешенные функции
1. exec
2. eval
Установка системы
Для установки системы скачайте вашу версию с сайта foton.name и распакуйте архив в директорию вашего сайта.
Перейдите по адресу в строке браузера http{s}://вашсайт/install.php или через консоль php install
Создайте базу данных и укажите ее параметры на данной странице, а также лицензионный ключ, после этого войдите в открытую форму указав везде demo, перейдите в модуль Обновление модулей, и обновите модули до последней версии, также рекомендуем обновить ядро системы в верхней панели, а также в разделе пользователи изменить ваши данные, более безопасно создать нового администратора, зайти под ним и удалить demo администратора. Также рекомендуем создать ваш личный ключ нажав на соответствующий значок в верхней панели РСИ, данный ключ требует синхронизации по времени вашего устройства с вашим сервером.
Установка для LiteSQL - Для установки системы скачайте вашу версию с сайта foton.name и распакуйте архив в директорию вашего сайта.
Удалите лишние файлы pbase.sql,base.sql,install.php откройте файл core/setting/main.php и укажите: "host"=>'localhost';
"sql"=>'lite';
"dbname"=>'foton';
"license"=>'вашалицензия';
Далее перейдите по адресу http{s}://вашсайт/admin/, далее шаги такие же как и для других SQL версий.
Создание одностраничного приложения
В качестве базы данных мы будем использовать mysql.
Мы будем использовать только один метод из ядра:
getlist - для вывода списка элементов таблицы
Директории, которые нам понадобятся для работы:
/app/model/site/
/app/controller/site/
/app/view/site/
/app/view/json/site/
/app/view/xml/site/
Создаем модель
Создаем файл news.php в директории /app/model/site/
Заполняем его следующим содержимым:
<?
namespace Model\Site;
class news extends \Foton\Model
{
public function sections()
{
return ["news"=>"Новости"];
}
public function name()
{
return 'Контент';
}
}
?>
Запрещаем доступ на операции на разделы для ролей пользователей:
<?
public function blocking(){
$arr = [
'all' =>[2],
'update'=>[1,2],
'insert'=>[2],
'delete'=>[1],
'select'=>[2]
];
return $arr;
}
public function blockingnews(){
$arr = [
'all' =>[2],
'update'=>[2],
'insert'=>[2],
'delete'=>[2],
'select'=>[2]
];
return $arr;
}
Добавляем метод для создания самих таблиц:
<?
public function interfaces()
{
$arr = [
"news" => [
"field" => ["id", "name", "href", "description","img","status"],
"name" => ["id", "Название", "Ссылка", "Описание","Фото","Статус"],
"format_select" => ["hidden", "input", "html","translit:name", "img:img","checkbox"],
"format" => ["int", "text", "text", "text", "text", "text"],
"delete" => "deleteFotonElement",
"key" => "id"
]
];
return $arr;
}
* Для mysql:
'text'=>'text(64300) NOT NULL',
'int'=>'int(70) NOT NULL',
'date'=>'DATE NOT NULL',
'bit'=>'BIT NOT NULL',
'poly'=>'POLYGON NOT NULL',
'real'=>'REAL NOT NULL',
'time'=>'TIME NOT NULL',
'medium'=>'mediumtext NOT NULL'
** все типы данных вы можете посмотреть по ссылке: вашдомен/lists/html/html в поле «Код»
Валидация данных при вводе и обновлении:
В директории /app/model/site/events создаем директорию news (название раздела)
Внутри директории создаем файл news.php (по названию таблицы)
<?
namespace Model\Site\Events\news;
class news
{
public function before_update($arr){
$arr['event'] = [
'require' => ['name'=>'alert','href'=>'alert'],
'is' => ['href'=>['abc09','fields']],
'valid' => ['name'=>'input'],
'update' => ['name'=>'test'],
'text' => 'Не заполнено поле [name]',
'textis' => 'Формат поля [name] должен быть [validate]'
];
return $arr;
}
public function after_update($arr){
return $arr;
}
public function before_insert($arr){
$arr['event'] = [
'require' => ['name'=>'alert','href'=>'alert'],
'is' => ['href'=>['abc09','alert']],
'text' => 'Не заполнено поле [name]'
];
return $arr;
}
public function before_get($arr){
return $arr;
}
}
* Методы обработки предупреждений находятся в классе dev/notice.php
alert,log,fields
** значениями массива могут быть:
number — проверяет является ли числом
abc09 — проверяет содержит ли только русские, латинские буквы и цифры
***значениями массива могут быть:
html — эквивалент htmlspecialchars
input — максимально безопасный способ, убирает все теги и использует html
decode — декодирует html
encode — кодирует html
number — удаляет все кроме цифр
text — удаляет все кроме русских, латинских букв и пробелов
tags — удаляет html теги
abc09 — удаляет все кроме русских, латинских букв и цифр
Перейдем в административную часть сайта в меню должен появится пункт Контент с подразделом Новости, давайте создадим 2 новости с любым содержанием.
Создаем контроллер
Перейдем в каталог /app/controller/site/ и создадим файл news.php
со следующим содержимым:
namespace Controller\Site;
use Modules\Test;
use Modules\Test\Classes;
class news extends Model\Site\news{
public function newslist(){
return $this->core->getlist(['table'=>'news']);
}
public function json(){
return $this->core->getlist(['table'=>'news','format'=>'J']);
}
public function xml(){
return $this->core->getlist(['table'=>'news','format'=>'X']);
}
}
* первый параметр аргумента метода news – название таблицы, далее в методах json и xml мы добавляем поле format – формат вывода
Создаем представление
Перейдем в каталог /app/view/site/ и создадим файл news_view.tpl
со следующим содержимым:
@for:{$data['newslist'] as $news}
@{news['name']}
@{news['description']}
@:@
Также давайте создадим файл /app/view/json/site/news_view.tpl со следующим содержимым:
@{data['json']}
Также создадим файл /app/view/xml/site/news_view.tpl со следующим содержимым:
@arr{data['xml']}
Теперь перейдем в административную панель и обновим кеш шаблонов нажав на значок обновления шаблонов:
Либо через консоль зайдя в корневую директорию вашего сайта введите команду#: php foton up
Затем давайте перейдем по адресу вашсайт/news/, должен отобразится список опубликованных новостей, стили для страницы вы можете добавить создав файл: /app/view/site/css/news.css, js для страницы вы можете добавить создав файл по адресу: /app/view/site/js/news.js
Также перейдя на страницу вашсайт/news.json мы увидим отображение наших новостей в json формате.
Перейдя на страницу вашсайт/news.xml мы увидим отображение наших новостей в xml формате.
Полностью код для тестирования по файлам
Файл /app/model/site/news.php:
<?
namespace Model\Site;
class news extends \Foton\Model
{
public function sections()
{
return ["news"=>"Новости"];
}
public function name()
{
return 'Контент';
}
public function interfaces()
{
$arr = [
"news" =>
[
"field" => ["id", "name", "href", "description","img","status"],
"name" => ["id", "Название", "Ссылка", "Описание","Фото","Статус"],
"format_select" => ["hidden", "input", "html","translit:name", "img:img","checkbox"],
"format" => ["int", "text", "text", "text", "text", "text"],
"delete" => "deleteFotonElement",
"key" => "id"
]
];
return $arr;
}
}
?>
Файл /app/controller/site/news.php:
<?php
namespace Controller\Site;
use Modules\Test;
use Modules\Test\Classes;
class news extends Model\Site\news{
public function newslist(){
return $this->core->getlist(['table'=>'news']);
}
public function json(){
return $this->core->getlist(['table'=>'news','format'=>'J']);
}
public function xml(){
return $this->core->getlist(['table'=>'news','format'=>'X']);
}
}
Файл /app/view/site/news_view.tpl:
@for:{$data['newslist'] as $news}
@{news['name']}
@{news['description']}
@:@
файл /app/view/json/site/news_view.tpl со следующим содержимым:
@{data['json']}
файл /app/view/xml/site/news_view.tpl со следующим содержимым:
@arr{data['xml']}
Просмотреть логи ошибок и предупреждений вы можете в консоли вашего браузера.
Для корректной работы отладки в режиме json необходимо указать дополнительный get параметр, например так: /news.json?format=api_json