- PHP 7.4.0 이상
- MySQL 5.0.7 이상 또는 MariaDB 권장
- 필수 PHP 모듈
- curl
- gd
- mbstring
- openssl
- json
- xml 및 simplexml
- php.ini에서 session.auto_start = Off로 설정되어 있어야 합니다.
simplecms's Introduction
simplecms's People
simplecms's Issues
autoload.php 및 bootstrap.php 파일 정리 필요
해당 파일의 목적에 맞지 않은 코드가 여러 개 들어가 있어서 정리가 필요함.
에러 및 예외, 경고 등의 다양한 오류 메시지를 다루고 출력할 수 있는 Message 패키지를 개발할 필요가 있음.
- autoload 부분 코드 정리 필요
Input package 개선
- $_REQUEST 변수 값도 가져올 수 있는 method 추가
- $_FILES 변수 값도 가져올 수 있는 method 추가
- XSS 태그 필터링 옵션 추가
PHP 버전이 맞지 않으면 실행이 되지 않도록 변경
Theme 패키지 추가
- Theme 패키지 추가
- 기본 테마 추가
페이지 모듈 개발
HTML 코드를 입력하면, 그대로 화면에 출력할 수 있는 기능을 가진 간단한 모듈 개발.
기능
- 페이지 생성
- 페이지 편집
위지윅에디터 모듈 개발
- CKEditor 스킨 제작
- Tinymce 스킨 제작
- 다음에디터 스킨 제작
- 스마트에디터 스킨 제작
캐시파일을 비울 수 있는 기능 추가
dashboard에 캐시파일 용량을 보여주고, 캐시파일을 비울 수 있는 기능 추가
DatabaseConnection에서 트랜잭션 지원
- begin
- commit
- rollback
각 3개의 트랜잭션 명령어 도입이 필요함.
Output package에서 headers already sent by 관련 에러가 발생하지 않도록 예외 처리 필요
header 전송 전에 headers_sent() 함수를 이용해 헤더 전송 여부를 먼저 체크 후에 header를 전송하도록 개선
Frontend 패키지 개선
CSS/JS 파일 추가 시, 경로 검사 없이 무조건 추가되는데, 이를 설치된 경로를 기준으로 추가되는 것이 맞다고 봅니다. 반드시 WEB ROOT에 설치한다는 보장도 없죠.
addCss()나 addJs() 뿐 아니라 unloadCss(), unloadJs() 메소드도 필요합니다.
코어 구조 확립 및 개념 정리
절차지향으로 코딩된 것을 객체지향으로 변경합니다.
그리고 CMS에서 사용되는 개념을 아래와 같이 정리합니다.
개념 정리
- 인스턴스:
- 모듈: 인스턴스를 가질 수 있는 컴포넌트
- 위젯: 페이지 혹은 테마에 부착할 수 있는 컴포넌트
- 테마: 레이아웃 혹은 모듈 및 위젯의 외관을 구성하는 컴포넌트
- 플러그인: 모듈, 위젯, 테마 등의 컴포넌트를 포함할 수 있으며 사이트 관리자가 키고 켤 수 있음
폴더 구조
- /_core/framework/
- /_core/framework/packages/
- /common/
- /common/css/
- /common/js/
- /common/img/
- /common/fonts/
- /plugins/
- /vendor/
MobileDetect 추가
모바일 및 테블릿 접속 감지를 위한 MobileDetect 라이브러리 추가.
_core 폴더 정리
_core 폴더가 다소 복잡하기에, 좀 더 명확히 구조를 이해할 수 있도록 개선합니다.
각 구성 요소들을 패키지 형태로 정리
핵심적인 구성 요소는 System 패키지로,
필요에 따라 사용할 수 있는 구성 요소는 Pulbic 패키지로,
사용자가 추가하여 사용할 수 있는 구성 요소는 User 패키지로 정의합니다.
- System 패키지와 Public, User 패키지로 분리
- Library 패키지를 Public 패키지로 변경
각 파일들을 재배치 및 통합
정리 대상
- autoload.php
- constants.php -> bootstrap.php
- Core.php -> bootstrap.php
- functions.php
- routes.php -> bootstrap.php
폴더 이름 정리
- 폴더 및 파일 네이밍 규칙 에 따라 정리하도록 합니다.
정리 대상
- /_core/_cache/
- /_core/_packages/
게시판 플러그인 개발
User
- 글 작성 기능
- 글 수정 기능
- 글 삭제 기능
- 글 수정/삭제 시 본인 인증 절차 걸치도록 하기
- 댓글 작성 기능
- 댓글 출력 기능
- 댓글 수정 기능
- 댓글 삭제 기능
- 대댓글 작성 기능
Admin
- 게시판 생성 기능
- 게시판 삭제 기능
- 게시판 기본 설정 변경 기능
- 권한 설정 기능
- 입력 항목 설정 기능
- 추가 설정 기능 (에디터, 파일 업로더 등)
Github 플러그인 개발
Github 저장소에 접근하여 이슈를 열람하고 생성할 수 있는 플러그인을 개발합니다.
추후 기본 모듈에서 제외하고, 자료실에서 내려받을 수 있도록 할 예정.
DatabaseConnection에 whereIn, whereNotIn 추가
Language 패키지 개발
Language 패키지
다국어 지원을 위한 패키지
기능
구체적인 사항 계획중
- ㅇㅇ
Site 패키지 추가
다중 사이트 지원을 위한 Site 패키지
Permission 패키지 추가
권한 관리를 위한 패키지
상수 정리
상수 이름 앞에 있는 ST_를 제거하고, 필요하거나 유용하게 쓰일 수 상수를 추가함
WYSIWYG 방식의 페이지 편집기 제공
- 위지윅 에디터
- 인라인 에디터
메뉴(Menu) 패키지 개발
User
Admin
- 메뉴 추가/수정 기능
- 메뉴 삭제 기능
- 메뉴 순서 변경 기능
Router 패키지 개선
현재 Router 패키지 내에서 모듈을 직접 실행시키고 있음.
이 부분은 Module 패키지 내에서 처리해야할 사항으로 판단됨.
추후, Module 패키지 내에서 실행하도록 내부 구조 리펙토링 필요.
관리자 페이지용 로그인 폼 추가
처음 진입 시, 서버 오류 메시지가 뜨는 게 부자연스러움
Validator 패키지 추가
코어 내에서 공통으로 사용할 수 있는 유효성 검사 패키지를 추가하고자 합니다.
아이디, 비밀번호, 이메일 주소, 영문, 숫자, 전화번호, 날짜, URL 등 자주 사용되는 규칙을 미리 제공하는 것이 좋을 것 같습니다.
문자열 길이나 두 필드 일치 여부를 검사하는 기능도 있으면 더 좋을 것 같네요.
Ouput package를 Response package로 rename
Output보다는 Response라는 명칭이 더 적합한 것 같음.
이전 호환성을 위해 Output package는 Alias로 둘 예정.
모듈 폴더 구조 리펙토링 및 개발 방식 표준화
모듈 폴더 구조 리펙토링 및 개발 방식 표준화
모듈 정보
기본적으로 package.json에 명세하도록 한다.
package.json 작성법은 기존 작성법과 동일하며, 몇 가지 추가되는 것이 있다.
예를 들자면, 다국어 지원을 위한 모듈 이름, 자료실에서 분류를 나누기 위한 모듈 분류 등이 있다.
그 외에 SensitiveCMS 버전, 필요한 서드파티 자료, PHP 확장 모듈 등 의존성을 관리할 수 있는 항목도 필요하다.
참고로 npm으로 설치하더라도 단독으로 동작이 불가능하므로, private 값은 true로 두는 것이 좋다.
- package.json 파일을 읽어서 모듈 정보를 반환하는 전역 함수 추가
모듈 클래스 (@Module.php)
<?php
namespace Module\[모듈명];
class Base extends \Core\Module\Base
{
}
?>
모듈 테마
각 모듈의 themes 폴더에 저장하도록 하며, 각 테마별로 클래스가 있어야 한다.
<?php
namespace Module\[모듈명]\Theme;
class [테마명] extends \Core\Module\Theme
{
public function __construct()
{
parent::__construct();
}
}
?>
파일 이름 정리
- module.php -> @Module.php
- controller.php -> Controller.php
- model.php -> Model.php
- view.php -> View.php
회원(User) 패키지 개발
User
UI
- 로그인 폼
- 회원 가입 폼
- 아이디 찾기
- 비밀번호 초기화
- 탈퇴하기
- 로그아웃
- 회원 개인 페이지
- 회원 정보 변경
http://simplecms.io/@아이디 와 같은 주소로 접근 가능.
Admin
- 회원 목록
- 회원 추가
- 회원 삭제
- 회원 정보 보기 / 수정
- 회원 가입 폼 관리
- 회원 그룹 관리
Template 패키지 개발
- if, elseif, else, endif 문법 지원 {{ @if (조건) }}
- for, foreach, while 문법 지원
- 주석 문법 지원 {{ -- 주석 -- }}
- include 문법 지원
- load 문법 지원
- {{ $변수명 }} 문법 지원
- {{ 상수명 }} 문법 지원
- {{ $theInstance->theMethod() }} 문법 지원
- {{ theClass::theStaticMethod() }} 문법 지원
- {{ theFunction() }} 문법 지원
php.ini에 timezone이 설정되지 않은 경우 발생하는 오류 수정
default timezone이 설정되지 않은 경우, 서버 설정에 따라 timezone을 설정하도록 수정.
참고 오류:
date(): It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.
Security 패키지 추가 및 htmlpurifer 추가
보안을 위한 Security 패키지를 추가하면서 htmlpurifier 라이브러리도 같이 추가하면 좋을 듯 합니다.
Output package에 redirect method 추가
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.