cms 생성에 대한 PHP 자습서. DIY CMS

웹 마스터라면 누구나 HTML / CSS를 알고 스스로 무언가를 구성 할 수 있어야하지만 이러한 도구만을 사용하여 웹 사이트를 처음부터 만들 필요는 전혀 없습니다.

인터넷이 발전하고 정보 흐름이 증가했으며 대부분의 사이트의 목적은 변하지 않았으며 자원에서 자원으로 사람들은 거의 동일한 기능 세트를 필요로했습니다. 당연히 바퀴를 끊임없이 재창조하는 것은 고맙고 비용이 많이 들고 쓸모없는 작업입니다. 기능면에서 유사하고 CMS가 된 사이트를 빠르게 만드는 문제에 대한 해결책-콘텐츠 관리 시스템.

CMS 란?

CMS는 사이트의 소위 "엔진"또는 "스켈레톤"입니다. 기성품 테마 기재. 웹 마스터는 CMS 파일을 서버에 업로드하고, 필요에 맞게 사용자 정의하고, 필요한 경우 테마를 선택하고 수정하고, 텍스트, 사진, 비디오 등의 콘텐츠로 사이트를 채우면됩니다.

CMS는 다른 언어들 프로그래밍 (대부분 PHP)이지만 CSS 및 HTML 코드를 사용해야하므로 이러한 개발 도구에 대한 지식은 항상 유용합니다.

CMS는 프로그램 또는 운영 체제 -설치, 구성 및 사용합니다. 이를 위해 프로그래밍 기술이 필요하지 않습니다. 편리한 관리 패널을 통해 사이트를 관리 할 수 \u200b\u200b있으며 미리 작성된 확장 기능인 플러그인을 설치하여 리소스의 기능을 확장 할 수 있습니다.

CMS 장점

CMS는 사이트 생성과 관련된 문제를 거의 완전히 해소합니다. 최신 엔진의 설치 및 구성은 간단하고 시간이 많이 걸리지 않습니다.

텍스트를 변경하거나 수동으로 만든 페이지에 페이지를 추가하려면 hTML 사용 CSS 사이트에서 코드를 편집해야합니다. 콘텐츠 관리 시스템에서 모든 것은 편리한 사용자 인터페이스를 갖춘 관리자 패널을 통해 이루어집니다.

CMS의 사이트는 동적이며 수천 페이지, 심지어 수만 페이지를 포함 할 수 있으며 확장하기 쉽고 관리하기 쉬우 며 디자인은 항상 최소한의 간섭으로 또는 시스템 코드를 전혀 건드리지 않고도 변경할 수 있습니다.

CMS 분류

모든 콘텐츠 관리 시스템은 조건부로 무료, 유료 및 자체 작성으로 나눌 수 있습니다.

별도의 라인은 "모바일 CMS"로 휴대용 장치... 그들 중에는 유료, 무료 및 자체 글도 있습니다.

유료 CMS

유료 CMS가 무료 CMS보다 안전하다고 믿고 있으며 여기에는 몇 가지 논리가 있습니다. 실행중인 사이트가 적습니다. 즉, 인기가 적습니다. 즉, 해킹 방법에 대한 웹 정보가 훨씬 적습니다. 그리고 유료 엔진 개발자는 이미지에 관심이 있으므로 적시에 취약점을 제거하고 예방하려고 노력합니다. 유료 시스템을 구매할 때 공식 기술 지원을받을 수 있습니다.

일반적으로 유료 엔진 사이트는 사용자가 필요에 따라 최적의 버전을 선택하는 여러 버전을 제공합니다. 버전은 기능이 다르고 그 결과 가격이 저렴합니다. 기능이 적습니다. CMS를 선택할 때 "더 비싸다"는 것은 "더 좋음"을 의미하지 않습니다. 편집 선택은 전적으로 사이트의 모양과 실제로 필요한 기능을 기반으로해야합니다.

그중에서도 매우 인기있는 세 가지 유료 콘텐츠 관리 시스템이 있습니다.

  • 1C-Bitrix. 1C와 통합 된 대규모 비즈니스 프로젝트 및 복잡한 온라인 상점에 가장 잘 사용되는 제품입니다. 이 시스템에는 러시아어로 된 엄청난 양의 참조 정보가 있습니다. 인기 덕분에 1C-Bitrix 전문 사이트 관리자를 찾는 것은 어렵지 않을 것입니다.
  • NetCat. 직관적 인 인터페이스, 편리한 관리자 패널 및 우수한 기술 지원을 갖춘 빠르고 까다로운 시스템입니다. 명함에서 포털에 이르기까지 모든 사이트를 만들 수 있지만 NetCat은 온라인 상점을 만드는 데 적합하지 않습니다.
  • UMI. CMS. 이 시스템에는 신중한 문서와 사용자 친화적 인 제어판이 있습니다. UMI.CMS에는 자체 모바일 앱... 그러나 이제 Umisoft 회사는 웹 사이트 빌더 umi.ru의 개발로 이동했습니다.

무료 CMS

사람들은 이익을 위해서가 아니라 "예술에 대한 사랑으로"그렇게합니다. 수십만 명의 개발자 다른 나라 무료 오픈 소스 CMS를 지원합니다. 새로운 플러그인, 테마가 지속적으로 생성되고 업데이트 및 패치가 출시됩니다.

원칙적으로 무료 CMS에서는 블로그 나 갤러리뿐만 아니라 온라인 스토어와 기업 포털도 만들 수 있습니다. 이러한 CMS에는 단점도 있습니다. 한 회사가 아이디어의 이미지가 중요한 유료 시스템을 다룬다면 누구나 무료 엔진을위한 테마 나 모듈을 작성할 수 있습니다. 이로 인해 확장이 항상 안전하지는 않으며 항상 고품질은 아닙니다. 무료 시스템의 안정성이 저하됩니다.

무료로 배포되는 상위 세 가지 일반적인 CMS를 고려하십시오.

  • 워드 프레스. 이 시스템에는 수많은 사이트가 만들어졌으며 오늘날 가장 인기있는 엔진입니다. 다양한 테마, 수천 개의 확장, 광범위한 지원, 사용 용이성은 긍정적 인 특성의 일부일뿐입니다. 그러나 인기의 반대편은 많은 취약점과 해커의 관심 증가입니다. WordPress 사이트의 보안을 위해 싸워야합니다. 이 CMS의 리소스는 검색 엔진이 선호하지 않는 것으로 보입니다. 이것은 다시 인기로 설명 할 수 있습니다. 템플릿 구조와 테마가있는 동일한 유형의 사이트가 너무 많습니다. 그것은 비밀이 아닙니다. 더 나은 최적화 웹 사이트 디자인도 최적화해야합니다. WordPress 웹 사이트를 만드는 방법에 대한 자습서도 참조하십시오.
  • Joomla!. 두 번째로 인기있는 CMS입니다. WordPress를 배우는 것이 더 어렵지만 설정이 더 유연합니다. Joomla에서 사이트를 만드는 방법에 대한 자습서도 참조하십시오..
  • 드루팔. 마스터 링에서 시스템은 이전 시스템보다 훨씬 복잡하지만 놀라운 유연성으로 구별됩니다. 원하는 경우 거의 모든 요구에 맞는 Drupal 사이트를 만들 수 있습니다.

자체 작성 CMS

이들은 맞춤형 제어 시스템입니다. 이러한 CMS는 모든 고객 요구 사항을 완벽하게 충족하고 프로젝트 요구 사항에 완벽하게 부합합니다. 인터넷에서 발견 된 취약성에 대한 정보가 없기 때문에 더 이상 학생이 해킹 할 수 없습니다. 원칙적으로 좋은 자체 작성 시스템의 마이너스는 가격입니다. 더욱이, 결국 개발 및 유지 보수 비용, 결국 모듈 및 테마는이 CMS를 위해 독점적으로 주문해야합니다. 타사 개발자는 기성 확장을 작성하지 않습니다.

무엇을 선택해야합니까?

확실한 답은 없습니다. 그것은 모두 예산, 목적 및 개인 취향에 달려 있습니다. 물론 대형 포털이나 온라인 상점은 CMS 없이는 할 수없고, 온라인 생성자는 "자신을위한"사이트 만 만들 수 있으며, HTML / CSS는 정적 및 소규모 명함 사이트에 더 적합합니다. 그렇지 않으면 선택은 귀하의 것이며 내 환경 설정은 다음과 같습니다.

  • 명함 및 블로그 사이트의 경우- 워드 프레스이후 이 CMS는 인건비 측면에서 프로젝트를 만드는 가장 간단하고 쉬운 방법입니다.
  • 카탈로그 및 필터가있는 사이트의 경우- 드루팔, SEO 작업을위한 최적의 구조를 생성 할 수있는 매우 유연한 CMS이며 최소한의 노력으로 요소로 프로젝트를 만들 수도 있습니다. 소셜 네트워크 작은 포털. 많은 사람들이 Joomla에서 똑같은 작업을하지만 개인적으로이 엔진이 마음에 들지 않습니다. 첫 번째 사이트를 만드는 법을 배웠고 더 인기가 있습니다.
  • 클라이언트 사이트의 경우 자주 사용합니다. Netcat이후 최소한의 컴퓨터 경험으로도 사용자에게 직관적 인 편리한 관리 영역이 있습니다. 또한 인건비 측면에서 프로젝트가 매우 빠르게 배포되어 상업적 목적으로 매우 편리합니다.
  • 1C와의 통합이있는 온라인 상점의 경우 Bitrix특히 멀티 스토어 기술을 적용해야하는 경우 (가격과 잔액이 다른 1C에 여러 창고가있는 경우) 온라인 상거래에 좁은 프로필 엔진을 사용하기도합니다. 쇼핑 스크립트 (유료) 및 Opencart(비어 있는).

일반적으로이 아이디어는 뉴스 미리보기를 표시하는 CMS 용 모듈을 생성하는 것이 간단합니다. 제 생각에 엔진은 PHP 코드와 HTML 코드를 간단히 분리 한 것입니다. 정확히 말하지 못할 수도 있습니다. 엔진이 아닙니다. 우리는 작성할 것입니다-템플릿 엔진입니다. 일반적으로 이것은 전혀 중요하지 않으며, 최종 제품은 미니 뉴스를 표시 할 수 있으며 동시에 코드를 건드리지 않고도 템플릿을 변경할 수 있습니다. 데이터베이스에서 정보를 가져 오지 않고 변수에 직접 쓸 것입니다. 시작 해보자 ... 파일을 만들어 보자 index.php 그 안에 다음 코드를 작성합니다.

포함 ( "모듈 / news.php");
$ 뉴스 \u003d index_page ();

포함 ( "템플릿 /index.html");
?>

여기에서 두 개의 파일을 연결하고 있음을 알 수 있습니다. 하나는 "module"폴더에서 가져온 것입니다. 모듈, "템플릿"폴더의 다른 하나, 즉 템플릿 ... 이해했듯이 모듈과 템플릿 자체를 작성해야합니다.하지만 두 가지 템플릿을 작성합니다. 하나는 메인 페이지의 마크 업을 포함하고 다른 하나는 미니 뉴스 자체의 마크 업을 포함합니다. 미니 뉴스부터 시작하겠습니다. 파일 이름을 지정하겠습니다. news.html






인덱스는 모듈에서 변수로 대체됩니다. 이제 메인 페이지 용 템플릿을 작성하겠습니다. index.html




첫 번째 엔진




일반 HTML 페이지에는 PHP 코드 만 포함됩니다. 여기에 뉴스가 표시됩니다. 모듈 자체부터 시작해 보겠습니다. news.php

index_page 함수 ()
{
// 정보로 변수 채우기
// 우리의 mininews는 텍스트, 제목, 날짜 및 저자를 보여줄 것입니다
$ txt \u003d "무언가를 만들 때 약간의 작은 것들을 잊어 버리고 ... 모든 것을 다시 쓰지 않기 위해 코드의 간섭이 최소화되도록 꾸미려고하면 안타깝습니다 ..";
$ txt \u003d "일단 이러한 시도가 성공을 거두면, 때로는 그런 식으로 발생하면 자신의 손으로 코드를 변형하게됩니다 \u003d (";
$ title \u003d "(! LANG : 뉴스 제목 1";!}
$ title \u003d "(! LANG : 뉴스 제목 2";!}
$ author \u003d "첫 번째 작성자";
$ author \u003d "두 번째 저자";
$ date_b \u003d "11 년 12 월 10 일";
$ date_b \u003d "11/10/13";

$ sm_read \u003d file ( "templates / news.html"); // 템플릿 열기
$ sm_read \u003d implode ( "", $ sm_read); // 결과적으로 파일 () 함수가 배열을 제공하므로이를 붙입니다.
for ($ i \u003d 0; isset ($ txt [$ i]); $ i ++) // 인덱스를 변수의 정보로 변경하는 루프를 표시합니다.
{
$ edd_tamp \u003d $ sm_read;
$ edd_tamp \u003d str_replace ( "", $ txt [$ i], $ edd_tamp);
$ edd_tamp \u003d str_replace ( "", $ 제목 [$ i], $ edd_tamp);
$ edd_tamp \u003d str_replace ( "", $ 작성자 [$ i], $ edd_tamp);
$ edd_tamp \u003d str_replace ( "", $ date_b [$ i], $ edd_tamp);

$ news. \u003d $ edd_tamp; // 모든 것을 하나의 변수에 붙입니다.
}
return $ news; // 함수 결과 표시
}
?>

사실, 작은 엔진이 작성되었습니다 ... news.html과 index.html 파일을 templates 폴더에 넣습니다. news.php 파일은 모듈 폴더에 있고 index.php 파일은 사이트 루트에 있습니다.

이것은 즉시 페이지를 생성 할 수있는 스크립트의 간단한 예일뿐입니다. 간단한 PHP 엔진에 대한 자세한 내용은 다음을 읽을 수 있습니다.

콘텐츠 관리 시스템 (CMS) 구축 작업은 새로운 PHP 개발자에게 혼란 스러울 수 있습니다. 그러나 악마는 그가 그린 것처럼 그렇게 끔찍하지 않습니다! 이 튜토리얼 시리즈에서는 처음부터 간단하면서도 완전한 기능을 갖춘 시스템을 구축 할 것입니다.

이 과정에서 MySQL 데이터베이스 및 테이블을 만들고, 객체, 상수, 포함, 세션 및 기타 PHP 도구를 사용하는 방법을 배웁니다. 또한 프레젠테이션에서 애플리케이션 로직을 분리하고 PHP 코드를보다 안전하게 만드는 방법을 보여줍니다. 또한 자신 만의 드림 시스템을 만드는 데 훨씬 더 유용한 것을 발견하게 될 것입니다.

데모 페이지에서 완성 된 애플리케이션의 작업을 볼 수 있습니다 (보안상의 이유로 "읽기 전용"모드가 활성화되어 있으므로 기사를 추가, 수정 또는 삭제할 수 없음). 번역 된 주석과 함께 작은 CMS의 전체 PHP 코드를 다운로드 할 수도 있습니다.

노트 : 강의 자료를 학습하려면 PHP 모듈이 설치된 Apache 웹 서버와 MySQL 서버가 필요합니다. 일하기 위해 로컬 컴퓨터 웹 개발자 도구 중 하나를 사용할 수 있습니다. XAMPP (on 영어), Denwer, Open server 또는 기타.

안전 참고

실제 프로젝트에서는 파일에 이름과 암호가 포함되어 있으므로 config.php를 웹 사이트의 루트 디렉토리 외부에 배치하는 것이 가장 좋습니다. 일반적으로 PHP 코드는 브라우저에서 볼 수 없지만 때때로 웹 서버의 잘못된 구성으로 인해 코드를 사용할 수있게됩니다. 해시 () 함수를 사용하여 암호를 해시하고 일반 텍스트 암호 대신 config.php에 해시를 저장할 수 있습니다. 그런 다음 사용자 등록시 hash () 함수를 다시 사용하여 입력 한 비밀번호를 인코딩하고 결과를 config.php에 저장된 해시와 비교할 수 있습니다.

다음 레슨에서는 애플리케이션의 기본 클래스 인 기사를 빌드 할 것입니다.

가장 간단한 것 중 하나이면 충분합니다 효과적인 방법 사이트를 만드는 것은 기성품 CMS에 사이트를 만드는 것입니다. 온갖 종류의 엄청나게 풍부하기 때문에 무료 솔루션 이 질문에 대해서는 불필요한 스크립트 등을 구입하기 위해 추가 비용을 지출 할 필요가 없습니다. 모든 것이 매우 간단하고 간단합니다.

정확한 수치에 대해 이야기하지는 않겠지 만 인터넷 사이트의 절반 이상이 CMS로 작성되어 있습니다. 이 방법 웹 사이트 생성은 추진력을 얻는 것을 멈추지 않습니다. 웹 프로그래밍의 기능과 복잡성을 공부할 필요가 없습니다. 어떤 종류의 프로그래머가되고, 특정 CMS를 사용하기위한 지침을 공부하기 만하면됩니다.

다양한 복잡성의 사이트는 기성 솔루션에서 만들어지며, 일반 정적 페이지와 전체 온라인 상점을 모두 만들 수 있으며,이 작업의 복잡성은 올바른 CMS를 선택하고 물론 설정하는 것입니다.

이러한 솔루션이 매우 잘 개발 되었기 때문에 쉽게 찾을 수 있습니다. 무료 템플릿 아름다운 디자인, 모든 종류의 플러그인 및 확장 기능으로 필요한 기능을 개선하고 수행합니다.

이 사이트 생성 옵션의 모든 주요 장점과 단점을 가능한 한 자세히 설명하려고합니다.

  1. 노동 집약적. 평균, 결국 당신은 모든 것을 스스로하고 그에 따라 자료를 직접 공부하고 모든 작업을해야하기 때문입니다. 여기서 무조건적인 플러스는 웹 프로그래밍에 거의 익숙하지 않은 사람들을 위해 처음 작성된 간단한 지침의 존재를 나타낼 수 있으며 따라서 CMS 관리 패널 자체가이를 염두에두고 작성되었습니다.
  2. 품질. 물론 코드 자체가 전문가에 의해 작성되어 그들이 무엇을하는지 알고 있기 때문에 품질은 최고 수준으로 유지됩니다. 그러나 결국 특정 CMS의 기능 범위에 의해 제한되고 적절하고 충분하지 않은 경우 원하는대로 아이디어를 구현하는 것이 항상 가능하지는 않다는 부정적인 점이 있습니다. 좋은 지식 웹 프로그래밍이지만 항상 모든 것이 잘 작동하는 것은 아닙니다.
  3. 재정적 비용. 이 순간은 확실히 즐거운 재정적 비용이며 모든 것이 무료이며 수업과 지침이며 물론 CMS 자체이기 때문에 아무것도 가지지 않을 것입니다. 지갑이 손상되지 않도록.
  4. 개발 전망. 예, 물론 그렇습니다.하지만 제가 말했듯이 선택한 CMS에 대한 플러그인을 업데이트하고 만드는 범위에 의해 제한됩니다. 그리고 무언가를 근본적으로 변경하려면 전체 CMS를 다른 CMS로 변경해야 할 수 있으므로 특정 옵션을 선택하기 전에 선택한 CMS의 모든 가능성을 확인하고 향후 사이트에서보고 싶은 내용을 미리 생각하십시오. 수행해야하는 기능.

CMS에 대한 연구 및 사이트 만들기를 시작하기 위해 연구에 대한 자세한 강의와 함께 다양한 CMS에 대한 정보 섹션이 만들어졌습니다.


이 사이트 섹션에는 가장 인기있는 CMS Joomla에 대한 강의가 포함되어 있으며,이를 기반으로 다양한 방향의 수많은 사이트가 인터넷에서 생성되었습니다.

  1. 일반 명함 사이트에서 원하는 템플릿을 선택하고 텍스트를 작성하면됩니다.
  2. 충분히 고품질의 블로그,이 기능을 구현하려면 몇 가지 추가 구성 요소가 필요하지만 이것은 문제가되지 않습니다.
  3. 거의 모든 규모와 복잡성의 온라인 상점.
  4. 사이트 디렉토리 또는 파일 아카이브.
  5. 포털-표준 Joomla 기능을 사용하여 구현 됨
  6. 이 Joomla에는 충분한 확장 기능이 있으므로 강력한 이미지 또는 비디오 갤러리를 만드는 갤러리 사이트
  7. 7. 사람 간의 커뮤니케이션을위한 사이트-Joomla에게는 사이트 방문자 간의 커뮤니케이션 구현을 위해 특별히 제작 된 수많은 구성 요소와 모듈이 있습니다.

이 섹션은 전적으로 가장 유명한 블로깅 엔진 인 WordPress로 작업하는 방법에 대한 자습서를 다룹니다. 가장 인기 있고 요구되는 블로깅 엔진은 무료로 배포 될뿐만 아니라 지속적으로 업데이트되고 개선됩니다.

이 CMS를 기반으로 만들 수있는 사이트 :

  1. 블로그는 확실히이 엔진이 만들어진 첫 번째이자 주요 방향입니다.
  2. 원칙적으로 모든 CMS는 일반 정적 사이트를 만들 수 있습니다.
  3. 광고 사이트
  4. 기사 카탈로그
  5. 포토 갤러리 웹 사이트
  6. 법정

얼마나 많은 재밌는 사람
그리고 모두가 자전거를 만듭니다.
그리고 그들 중 하나는 어느 날 아침
화약이 나온다.
빅토르 초이.

처음에는 "나는 PR"섹션에 내가 얼마나 훌륭한 친구이고 내가 얼마나 멋진 일을했는지에 대한 기사를 쓰고 싶었지만, 인터넷에서 약간 검색 한 결과, 나는 전혀 내 동료가 아님을 전혀 알지 못했습니다. 그런 다음 저는 그 반대에서 가기로 결정했습니다. 아마도 거의 모든 웹 프로그래머는 평생 적어도 한 번은 완전한 CMS를 작성하려고합니다. 동시에, 디자인 프로세스 (그리고이 프로세스는 종종 코드를 작성하는 동안 이미 발생 함)에서 개발자는 확실히 질문을 할 것입니다. 이러한 질문으로 그는 검색 엔진을 사용하여 이미 유사한 갈퀴를 겪은 사람들의 사이트에 도착합니다.

그래서 저는 초보자 "자전거 디자이너"가 내게 어떤 요청을하는지 알아보기 시작했고, 작업 초반에 나에게 분명하지 않은 몇 가지 사항을 강조하려고했습니다.

1. MVC는 우리의 전부입니다!

웹 애플리케이션 개발에 대한 대화가 진행되는 곳마다 유행하는 약어 인 MVC (Model-View-Controller)가 즉시 나타납니다. 이 접근 방식은 인터페이스가 로직과, 로직과 데이터를 분리해야한다고 말합니다. 나는 이러한 아이디어에 완전히 빠져 있다고 말하지는 않겠지 만, 디자인 (또는 디자인)의 변경이 코드의 논리에 영향을주지 않아야한다는 사실은 입에서 거품으로 방어 할 준비가되어 있습니다. :)

여기 레이크 넘버원도 있습니다 : 외관 프로그램의 논리와 분리되어야합니다. 그것을하는 방법-모두가 스스로 결정합니다. 이 문제에 대해 꽤 많은 사본이 손상되었습니다. 다양한 템플릿 엔진과 xslt 변환이 있으며 php + html 만 별도의 파일로 추출되었습니다. 선택의 폭은 크지 만 평소와 같이 "실버 총알"은 존재하지 않습니다. 유연성은 척도의 한쪽에 있고 다른쪽에는 명확성이 있습니다. "어린 아이들을위한 프로그래밍"기능을 가진 Smarty조차도 많은 사용자에게 어려운 것 같습니다. 따라서 최소한의 프로그래밍 지식으로 시스템을 "바로 사용"하고 필요에 따라 파일을 작성하려는 사용자에게 집중한다면 머리를 부수는 것이 좋습니다.

또한 디자인은 교체가 가능해야하며, 가능해야합니다. 즉, 편리한 저장 및 편집을 제공해야합니다. 그리고 많은 사람들이 무시한 한 가지 더 : 디자인은 쉽게 편집하고 업데이트 할 수 있어야합니다. 모든 것이 테이블에 단단히 고정되고 JavaScript 조각이 "논리에서"어딘가에서 삽입되는 200 개의 템플릿으로 구성된 무료 포럼의 디자인을 조정해야한다면 정확히보고 싶지 않은 것이 무엇인지 알 수 있습니다.

나는이 구조를 생각해 냈다. 커스텀 디자인에서는베이스 디자인에없는 것만 존재한다. 즉, 가장 최소한의 경우 디자인은 디자인 이름이있는 빈 카탈로그로 구성됩니다. 이 경우 모든 누락 된 부품이 차용되기 때문에 디자인이 기본 디자인과 똑같이 보일 것이 분명하지만 시작점으로 이것은 매우 편리합니다. css가 디자인에 나타나면 시스템이 자동으로 전환합니다 (HTML은 여전히 \u200b\u200b기본에서 차용 됨). JS도 마찬가지입니다. 이것으로 얻는 것 : 사용자 디자인에는 그가 직접 만든 파일 만 있습니다. 사용자는 자신이 수정 한 파일과 작업 시작시 기본 설계에서 복사 한 파일을 기억할 필요가 없습니다. 이 사이트는 또한 사용자 정의 디자인을 편집하지 않고 기본 디자인의 거의 모든 혁신을 표시합니다. 그러한 시스템은 나에게 편리하고 논리적으로 보였지만 어떤 사람들에게는 다소 예상치 못한 것처럼 보였습니다. 그것을 채택 할 것인지 아니면 스스로 생각 해낼 것인지-당신이 결정합니다.

2. 사이트 구조

커널 작성을 시작하겠습니다. 커널은 무엇을해야합니까? 그리고 사이트 설정, 사용자 그룹의 권한 및 설정, 사용 된 모듈, 템플릿, 캐싱 매개 변수, 현지화 등 모든 "더러운"작업을 수행해야합니다. 즉, 플러그인이 작동하기 시작할 때까지 커널에서 관심있는 모든 정보를 얻을 수 있습니다. 소름 끼치는 것처럼 들리지만 요소의 상호 작용을 명확하게 이해하면이 모든 것이 비교적 작성하고 작업하기 쉽습니다.

나는 사이트가 데이터베이스 어딘가에 버려진 페이지가 아니라 엄격한 계층 구조가 될 것이라고 스스로 결정했습니다. 결과적으로 사이트 구조는 나무와 같으며 디자인의 경우와 같이 누락 된 부분은 부모로부터 상속됩니다. 사용자 그룹의 구조도 트리와 유사합니다. 권한과 설정도 부모로부터 상속됩니다. 지역화 파일과 모듈도 간단한 계층 구조를 가지고 있습니다. 명확한 계층 구조 덕분에 다음과 같은 모든 종류의 불쾌한 일을 이동할 수 있습니다. 자동 생성 사이트 맵, 다양한 메뉴, 권한 배포 (예, 여러 그룹에 대한 권한을 부여하려면 각 그룹을 편집 할 필요가 전혀 없습니다. 계층을 정의하는 것으로 충분합니다) 등. 살고 기뻐하십시오! 레이크가 아니었다면 모든 것이 괜찮을 것입니다.

첫 번째 갈퀴. 캐싱.
제가 "메가 엔진"을 설계하는 동안 캐싱에 국한되지 않았습니다. 그리고 당신은 생각합니다 – 무엇이 그렇게 어려운가요? 페이지를 변수에 넣고 파일에 저장하고 다음에 거기에서 보여주었습니다. 사업 ... 언제든지 붙일 수 있습니다! 아 ... 등록 된 사용자를위한 또 다른 페이지가 있습니다. 음 ... 음, 생각해보십시오. 두 페이지를 캐시에 저장하겠습니다! 그리고 헤더에 "hello, Vasya"를 표시해야합니다 ... 음, 헤더의이 조각은 캐시되지 않아야합니다. 그리고 지하실의 동일한 조각 ... 그리고 중간 ... 흠 ... 여전히 페이지의 다른 부분을 다른 기간 동안 캐시해야합니다 ... 우리는 앉아서 블록으로 캐시하기 위해 엔진과 캐시 시스템을 다시 작성하여 각 블록이 자체 수명을 갖도록합니다.
두 번째 갈퀴. 캐싱.
어떻게?! 다시 캐싱 하시겠습니까? 우리는 이미 모든 것을 아름답게했습니다! 글쎄, 네 ... 완료 ... 그리고 그것을 기반으로 각 사용자에 대한 콘텐츠를 생성하는 작업까지도 작동했습니다. 개인 설정... 동시에, 캐시 크기는 제트 전투기의 속도에 따라 커지고 그 내용은 다시 요청되는 것보다 훨씬 빨리 구식이됩니다. 사이트의 속도를 높이는 대신 속도를 늦추고 불필요한 캐시 된 페이지 수 기가 바이트 ... 사이트의 주요 스크립트는 "그의 위엄있는"캐시 무효화 기입니다. 흠 ... 엔진을 다시 작성하십시오. 이번에는 성능의 병목 현상이므로 데이터베이스에 대한 쿼리 수준에서 캐싱을 구현할 것입니다. 재 작성 ... 모든 것이 열반입니다.
세 번째 갈퀴. 캐싱.
당신은 당신의 창조물을보고 완전한 바보처럼 느껴집니다. 전체 페이지를 저장하는 대신 매번 그것을 만듭니다. 그러나 캐싱은 그 반대를 위해 정밀하게 고안되었습니다! 어떻게 그렇게 터 졌어?

최종 결과는 일부 모듈이 블록 캐시되고 일부는 쿼리 캐시된다는 것입니다. 이것은 예를 들어 사이트 메뉴와 같이 거의 변경되지 않는 것들을 캐시에 저장하는 데 몇 달 동안 허용되었습니다.

내가 배운 교훈은 이것이다 : 시스템은 처음에 특정 실행 단계에서 캐시에 쉽게 넣거나 거기에서 가져올 수있는 데이터를 그룹화하는 방식으로 설계되어야합니다. 또한 캐싱 시스템은 엔진에 단단히 묶여서는 안됩니다. 오늘은 캐시를 파일에 저장하는 것으로 충분하고 내일 (또는 오늘 밤에도) Memcache 서버 작업을 시작하기 때문입니다.

엔진을 작성하는 과정에서 리팩토링에 대한 영리한 책을 읽거나 엔진을 작성한 후에 읽는 것도 이치에 맞습니다. 어쨌든 세 가지 (당신, 엔진, 책) 모두이 혜택을받을 수 있습니다.

3. 모듈성.

현대 시스템을 "그 자체"로 상상하기는 어렵습니다. 기능을 확장하려면 인터페이스가 있어야합니다. 따라서 우리는 CMS의 가장 맛있는 부분 인 모듈 작성으로 이동합니다. 여기에는 모듈의 모양, 시스템에 연결하는 방법 등 많은 질문이 있습니다.
일부 시스템에서는 호출 모듈이 시스템의 커널에 하드 코딩되어 있으므로 모듈을 작성하거나 타사 모듈을 설치하려면 다음으로 이동하십시오. 출처, 설치 설명서로 무장하고 코드에 적절한 호출을 작성하십시오. 접근 방식의 모든 어리 석음에도 불구하고 많은 시스템이 정확히 이와 같이 작동합니다. 이 솔루션의 변형이 있습니다. 각 모듈은 디렉토리에있는 별도의 파일입니다. 이 경우 모듈을 커널에 쓸 필요가있을뿐만 아니라 단일 파일로 실행해야합니다. 활성 템플릿이있는 옵션도 있습니다. 즉, 템플릿에 (module_name)을 입력하고 파서가이 태그에 도달하면 module_name 모듈이 실행을 위해 호출되고 그 결과가 태그 대신에 표시됩니다. 아마도이 방법이 편리 할 수도 있지만,이 경우 논리를 표현과 분리하지 않았을뿐만 아니라 그 반대입니다. 철저히 혼합했습니다.

일정 횟수의 충돌 후에 나는 아마도 간결함과 단순성의 모델이 아닌 시스템에 도달했지만 꽤 편리하다고 생각합니다. 각 모듈은 커널이 하나의 파일 (index.php) 만 호출하는 별도의 디렉토리입니다. 이 파일 "Hello world!"를 표시 할 수 있고 하이퍼 스페이스 준 이미 터에 대한 제어 파일을 포함 할 수 있습니다. 이는 모듈 개발자에게 편리합니다. 동일한 디렉토리에는 모듈 매개 변수, 가능한 설정 및 권한 시스템에 대한 설명이있는 xml 파일이 있습니다. 이 파일은 시스템이 자체적으로 모듈을 추가하고 사용자에게이 골칫거리를 전달하지 않을 수 있도록 사용됩니다. "모듈 설치"버튼을 클릭하여 가져 오십시오.

우리는 설치를 알아 냈습니다. 새로운 문제가 발생합니다. 사용자가 한 페이지, 예를 들어 사진 앨범 및 예를 들어 포럼에 배치하는 것을 허용하지 않는 방법은 무엇입니까? 상식에 의존하는 것은 쓸모가 없으므로 모듈의 타이핑이 필요합니다. 이 유형의 모듈은 하나만있을 수 있습니다 (어딘가에서 이러한 모듈에 대한 "구성 요소"개념을 보았습니다). 페이지에는 하나만있을 수 있습니다.

글쎄, 페이지에는 하나의 구성 요소 만 있지만 다른 구성 요소가 많이있을 수 있습니다. 어떤 순서로 연결해야합니까? 결국 어떤 종류의 스킨의 모듈이 작업이 끝날 때 사용자를 다음으로 전환하는 것은 어리석은 일입니다. 홈페이지 사이트는 짝짓기 시즌 동안 토끼 수의 역학을 분석하기위한 모듈이 작동 한 후 연결되며 분석 결과를 볼 수 없으며 계산에 시간을 할애합니다. 따라서 모듈은 합의 된 연결 순서를 가져야합니다.

어떤 사람들은이를 위해 nix 런레벨의 아날로그를 소개하는데, 각 모듈에 대해 어떤 모듈을 연결해야하는지 등록해야합니다. 사용자로서이 결정은 저를 혼란스럽게 만들었지 만 개발자로서 거의 똑같은 것을 생각해 냈습니다. 모듈은 세 개의 큰 그룹으로 나뉩니다. 그룹 중 하나는 이미 언급 된 "컴포넌트"이고 다른 두 그룹은 한 그룹의 모듈이 컴포넌트 앞에 연결되고 다른 그룹은 이후에 연결된다는 점에서만 다릅니다. 더욱이, 나는 사용자로부터이 분리를 숨겨서 그에게는 단지 "컴포넌트"와 "단지 모듈"만 있었다.

그래서 모듈이 설계되었고 연결을 결정했습니다. 이제 모듈을 구성하고 액세스하는 방법을 결정해야합니다. 그리고 여기서는 모든 것이 간단합니다. 우리 커널은 "더러운"작업을위한 것이기 때문에 골치 아픈 일이 생기도록 놔두십시오. xml의 모듈이 설정 목록을 발행하고 커널이이를 구문 분석하고 저장하고 요청시 제공하도록합니다. 그게 다입니다. 다만.

개발 과정에서 발생한 또 다른 문제는 모듈간에 데이터를 전송하는 것입니다. 문제의 용어에 따르면, 그들은 서로에 대해 아무것도 모르고 커널에 의해 숫자 순서로 호출됩니다. 하지만 한 모듈에서 다른 모듈로 뉴스를 전달하고 싶습니다! 이를 위해 전역 변수에 대한 특수 클래스를 도입했습니다. 여기서 각 모듈은 그 뒤에 오는 사람들을 위해 메모리에 무언가를 저장할 수 있습니다. 여기에 아마도 그다지 우아하지 않은 해결책이 있습니다.

4. 업데이트

항상 최신 버전을 원하지만이를 위해 신체 움직임을 최소화하십시오. 따라서 업데이트 프로세스를 자동화하려는 욕구. 그리고 여기에도 그다지 광범위하지는 않지만 그럼에도 불구하고 솔루션 동물원이 있습니다. 가장 진보적 인 프로그램은 모든 디렉토리에 대해 777, 파일에 대해 666으로 권한을 설정 한 다음 "스크립트가 모든 것을 자체적으로 수행합니다"를 제공합니다. 이것이 그랜드 캐년 크기의 보안 구멍이라는 것은별로 중요하지 않습니다.

두 가지 옵션에 대한 아이디어가있었습니다. 스크립트는 임시 디렉토리에 업데이트를 다운로드 한 다음 사용자에게 FTP 액세스 매개 변수를 요청한 후 자체적으로 업데이트합니다. 따라서 그는 추가 권한을 부여 할 필요가 없으며 모든 것이 자동으로 발생하며 업데이트는 서버 내에서 추적됩니다. 매번 사용자에게 FTP 액세스 매개 변수를 요청하거나 사이트에 바로 저장해야합니다. 즉, 모든 계란을 하나로 바구니. 따라서 저는 다른 옵션을 선호했습니다. 사용자 자신이 업데이트 (아카이브 또는 svn을 통해)를 다운로드하고 사이트에 업로드하고 사이트의 코드가 "새로워졌다"는 느낌으로 데이터베이스 및 / 또는 설정에 필요한 수정을 수행합니다.하지만 첫 번째 옵션은 여전히 더 아름답습니다 ...하지만 감히하지 않았습니다.

이것은 내 "자전거 건물"에서 가장 기억에 남는 이정표입니다. 이 글을 읽었을 때, 작업 초반에 이런 것을 만나지 못했고, "올바른"질문을 할만큼 충분한 경험과 충돌이 없었던 것을 정말 후회합니다. 내가 결국은 너야

이 공유
저작권 2020. shongames.ru. 기계적 인조 인간. 운영 체제. 멀티미디어. 소셜 네트워크. 도구. 코덱. 그래픽 아트. 판권 소유.