всем мира!
Подскажите я вот сделал своё дополнение для движка, проверил на своём сайте на openserver вроде всё работает, так как это первое дополнение которое я сделал (нужно было для своего сайта) и понятно что скорей всего многое неправильно написал в коде то нужно что бы его как то проверить на правильный код, на безопасность и так далее, есть ли тут модератор котором можно было бы отправить для проверки или только тут в блоге вставлять ?
Разработка своего дополнения
я вот сделал своё дополнение для движка
С почином )
скорей всего многое неправильно написал в коде
Обычное явление, тут почти все такими делами занимаются )) (шутка). Главное что работает.
есть ли тут модератор котором можно было бы отправить для проверки или только тут в блоге вставлять ?
Модераторов таких нет и вряли появятся. На проверку самого движка, как первой, так и второй версии, народ собирал складчину и отправляли специалисту. А с личными разработками складчину врядли будут собирать, поэтому в большинстве случаев правильность кода вообще не смотрят, а за безопасность отвечает только совесть самого разработчика.
А так базово проверьте, что все данные, получаемые от пользователя, или нигде не выводятся, или обрабатываются, чтобы не пустить в базу лишнее, или выводятся на сайте безопасным образом, например, с помощью функции html()
про складчину не понял )) мне просто что бы знающий человек сказал что в правильном направлении делается в плане безопасность и всё!(что бы установить на свой сайт и не беспокоится что что то не правильно)(там дополнение то простое пара запросов базу)
вот например вам просто могу отправить что бы глянули или нет? или нужно блог писать тут и выкладывать :?
там дополнение то простое пара запросов базу
Ну так выложите код. Может кто что и подскажет.
Отправьте, посмотрю, может подскажу что нибудь
My-InstantCMS.Ru, ок напишу в личку спасибо
No Name, посмотрел дополнение, для первого раза очень хорошо, продолжайте в том же духе)
Есть некоторые моменты в коде, где я бы сделал по другому, например:
В файле system\fields\rximgo.php не нужны методы hookAfterAdd и hookAfterRemove они и так выполняются в таком же виде, что есть сейчас.
В методе parse вы получаете объект core потом из request получаете ctype_name и slug, что бы получить текущий запись.
$inCore = cmsCore::getInstance(); $content_model = $inCore->getModel('content'); $current_item = $content_model->getContentItemBySLUG($inCore->request->get('ctype_name'), $inCore->request->get('slug')); $url_item = $inCore->uri; $my_zapros_tip_contetna = 'con_'.$inCore->request->get('ctype_name'); $my_get_str = ($content_model->getItemById($my_zapros_tip_contetna, $current_item['id']))['rx_user_iamgo'];
Не нужны такие сложности, так как текущий запись уже есть в этом методе, просто обращайтесь так
$this->item['ctype_name']; // имя типа контента $this->item['id']; // ID записи $this->item['title']; // Заголовок записи $this->item['rx_user_iamgo']; или $value; // Значение вашего поля
В файле system\controllers\rxcontroller\actions\addamgomer.php
Данные о текущем пользователей получаете так cmsUser::get('is_logged') или cmsUser::get('id')
Лучше получать так
$this->cms_user->is_logged; // авторизован или нет $this->cms_user->is_admin; // админ или нет $this->cms_user->id; // ID текущего пользователя $this->cms_user->nickname; // ник пользователя
Так же вы создаете объект модели контента cmsCore::getModel('content') и обращаетесь в getItemById
Данный метод общий и можно обращаться с любой модели, поэтому лучше создайте свой файл model.php или объект
$model = new cmsModel();
Еще заметил, что везде используете insertOrUpdate, хотя update ни разу не было, поэтому лучше использовать insert
В файле templates\modern\controllers\rxcontroller\fild_rx_imgo.tpl.php есть такой неправильный код
<div style="width: 50px;height: 50px;float: left;margin: 5px;"> <a href="/users/<?php echo $users_model->getUser($user_go)['id']; ?>" title="<?php echo $users_model->getUser($user_go)['nickname']; ?>"> $user_avatar = $users_model->getUser($user_go)['avatar']; echo html_avatar_image($user_avatar, 'small', $user->nickname); } else { echo html_avatar_image_empty($users_model->getUser($user_go)['nickname'], 'embed-responsive-item'); } ?> </a> </div>
Этот код выполняется в массиве списка пользователей и для каждого пользователя вы выполняете 5 запроса что бы получить id, nickname, avatar
Через какое то время начнутся нагрузки на базу, вам надо хотя бы в начале цикла получить один раз инфо о юзере, потом выводить
<?php $user = $users_model->getUser($user_go); ?> <div style="width: 50px;height: 50px;float: left;margin: 5px;"> <a href="<?php echo href_to('users', $user['id']); ?>" title="<?php echo $user['nickname']; ?>"> $user_avatar = $user['avatar']; echo html_avatar_image($user_avatar, 'small', $user->nickname); } else { echo html_avatar_image_empty($user['nickname'], 'embed-responsive-item'); } ?> </a> </div>
Но всё же не советую в tpl файлах использовать запросы на базу, это лучше сделать в файле system\fields\rximgo.php
В этом же файле выводить иконки полностью с <svg></svg> не надо, для этого есть удобный метод
<?php html_svg_icon('solid', 'minus-circle'); ?>
В остальном всё нормально, обращайтесь если возникнут вопросы
My-InstantCMS.Ru, большое спасибо за оценку моего первого дополнения ) и спасибо за указанные ошибки, щас буду внимательно всё читать и изучать! Спасибо что находите время для объяснения )
1. не нужны методы hookAfterAdd и hookAfterRemove? немного не понял, а как же без них мне создать и удалить дополнительное поле в базе данный ?
ведь метод hookAfterRemove как выполняется при удалении основного поля
2. Но всё же не советую в tpl файлах (поправил вынес из шаблона) — а на что это может влиять ?
всё остальное поправил, спасибо
1. не нужны методы hookAfterAdd и hookAfterRemove? немного не понял, а как же без них мне создать и удалить дополнительное поле в базе данный ?
Если доп поле объявлено в $cache_sql, то оно создается и удаляется автоматически. hookAfterAdd и hookAfterRemove нужны если создаете несколько полей в БД или нужны данные по создаваемой записи.
2. Но всё же не советую в tpl файлах (поправил вынес из шаблона) — а на что это может влиять ?
всё остальное поправил, спасибо
Со временем файлов шаблонов может появиться немалое количество, да ещё и разбросано будет по папкам разных шаблонов. И если вы захотите добавить/изменить структуру или каким-то образом обработать выводимые данные, вам надо будет бегать по всем этим файлам шаблонов и везде менять. А когда вся логика получения данных содержится в одном месте то это будет проще в обслуживании. Поэтому получение и обработку данных отделяют от файлов шаблонов. В файлах шаблонов надо стараться выводить только html-разметку с переменными. Чтобы сторонний верстальщик смог спокойно переверстать под свой шаблон, не заморачиваясь с получением и обработкой данных.
hookAfterAdd и hookAfterRemove нужны если создаете несколько полей в БД или нужны данные по создаваемой записи.
да у меня именно так, $cache_sql не используется
да у меня именно так, $cache_sql не используется
Если не поняли этот момент, изучите поле Город, там сначала создается поле, имя которого задаете в админке, например city, еще параллельно создается city_cache, который хранить текстовое названия города. Для таких полей или если ваше поле использует несколько ячеек в таблице, надо в hookAfterAdd и hookAfterRemove создать/удалить