8

Tôi đã được giao nhiệm vụ mới từ khách hàng về cơ bản là tạo CMS cho các diễn viên/ca sĩ và giống như khách hàng đó sẽ bán cho họ. Nó sẽ cơ bản là một gói và sẽ làm việc out-of-box khá nhiều tương tự như WordPress, bạn chỉ cần bàn giao cho bất cứ ai mua nó, nhưng tất nhiên điều này sẽ không phải là một nền tảng blog. Nó sẽ cho phép các nhà phát triển:PHP: Tạo hệ thống CMS mở rộng

  • Thêm plugins/widget
  • Thêm templates/themes

Tôi nghĩ Observer Patten có thể hữu ích nhưng tôi không chắc chắn về nó. Có gì các bạn có thể gợi ý để tạo ra như vậy linh hoạt/mở rộng CMS về:

  • Khả năng thêm plugin (ví dụ như WordPress)
  • Khả năng thêm các chủ đề/mẫu (ví dụ như WordPress)
  • thiết kế mẫu
  • gì Không (Không chắc - mở để gợi ý)

Cám ơn ý tưởng và giúp đỡ của bạn.

+0

tò mò ... bất kỳ lý do nào mà một cms hiện có (như drupal) không thể được mở rộng để làm những gì bạn muốn? – xenoterracide

+0

@xenoterracide: Đó là yêu cầu của khách hàng để tạo một hệ thống CMS mới được nhắm mục tiêu đến các diễn viên và ca sĩ và các thực thể tương tự từ truyền thông. – Sarfraz

+2

http://journal.relativesanity.com/2008/11/17/how-not-to-build-an-in-house-cms/ –

Trả lời

19

Phạt tiền của người quan sát, nhưng bạn sẽ phải xem xét vượt ra ngoài mô hình cơ bản. Mẫu quan sát/Chủ đề kinh điển chỉ gửi đối tượng Chủ đề tới Người quan sát, không có gì khác, thậm chí không phải lý do tại sao nó đang được thông báo.

Ban đầu, giải pháp có vẻ như cũng bao gồm lý do thông báo cho Người quan sát, nhưng sau đó bạn có thể kết thúc thông báo cho Người quan sát không quan tâm đến một số thông báo nhất định. Một giải pháp tốt hơn có thể yêu cầu Người quan sát cũng yêu cầu danh sách thông báo họ muốn nhận.

Nhưng điều đó cũng thể hiện sự cố. Để các Nhà quan sát thực sự gắn bó với Chủ thể, họ phải được khởi tạo. Mỗi lần duy nhất. Ngay cả khi họ không bao giờ cần thiết. Đó là ngớ ngẩn.

Vì vậy, chúng tôi đã nhanh chóng đạt được một trong các plugin triển khai PHP chính tắc: "móc". Móc sử dụng khái niệm tương tự như Observer/Subject, nhưng việc triển khai thực hiện khác nhau theo một cách rất quan trọng: Người quan sát thực tế không được khởi tạo để Quan sát đối tượng. Thay vào đó, Subjects gửi một thông báo đến một số kho lưu trữ trung tâm. Kho lưu trữ này được định cấu hình với danh sách tất cả được cài đặt và kích hoạt các plugin (Quan sát viên) và chứa danh sách tất cả các sự kiện mà mỗi plugin muốn nhận. Mỗi plugin và được thông báo chỉ khi sự kiện diễn ra, thường thông qua một phương thức tĩnh thay vì bằng cách tạo một thể hiện của plugin và thông báo cho nó. call_user_func_array và một autoloader tốt làm cho điều này cực kỳ tầm thường.

Do đó, bạn có thể tạo Giao diện đơn giản cho tất cả plugin để triển khai. Các phương thức bạn cần bao gồm nhưng không giới hạn ở:

  • Nội dung nào đó để tìm nạp dữ liệu về plugin, tên, tác giả, trang web chính thức, phiên bản, v.v ... Thông tin người tiêu dùng.
  • Phương thức trả về các sự kiện mà plugin muốn đăng ký.
  • Phương pháp cài đặt, cho những thứ mà plugin cần làm để tự cài đặt, chẳng hạn như thao tác cơ sở dữ liệu.
  • Phương pháp gỡ cài đặt cũng có thể hữu ích.
  • Phương pháp (có thể là tĩnh) sẽ nhận thông báo sự kiện và trả lại bất kỳ dữ liệu nào là cần thiết.

Tùy thuộc vào cách bạn chụp khái niệm plugin, bạn có thể kết thúc bằng các plugin có tùy chọn cấu hình người dùng. Bạn có thể cần phải tính đến điều đó. Xuống con đường đó là điên rồ và hệ thống cấu hình.

Để làm cho plugin có hiệu quả, bạn sẽ cần đặt móc ở mọi nơi và thường xuyên làm việc với người dùng cuối để thêm móc mới khi cần.

Tiện ích có thể dễ dàng hoạt động theo cách tương tự, như plugin được gọi trước khi hiển thị trang.


Chủ đề/mẫu, oh my. Bạn có thể có hai lựa chọn lớn.

  1. Smarty hoặc một công cụ mẫu tương tự. Hoặc công cụ mẫu không phải PHP của riêng bạn.
  2. Mẫu PHP.

Quyết định này sẽ được thúc đẩy bởi người dùng cuối của bạn. Smarty là cực kỳ hạn chế, nhưng nếu bạn muốn chắc chắn rằng chỉ có mã được phê duyệt chạy trong một mẫu, nó có thể là một lựa chọn khả thi. Hơn nữa, nó không phải là không an toàn để cho phép chỉnh sửa các mẫu Smarty ngay trong bản thân ứng dụng.

Mặt khác, một trong những lý do các mẫu Wordpress hoạt động rất tốt là chúng thuần túy là PHP. Họ có thể gọi bất kỳ phương pháp nào được hiển thị trong API Wordpress và thậm chí thực hiện logic thú vị của riêng mình. Nếu bạn mong đợi người dùng cuối của mình được đầu tư kỹ thuật, hoặc ít nhất là có thẩm quyền về mặt kỹ thuật, thì các mẫu PHP là cách để đi. Mặt khác, cho phép chỉnh sửa các mẫu PHP trong ứng dụng có thể mở ra một lỗ hổng bảo mật tiềm năng rất lớn nếu người dùng độc hại xâm nhập vào các bit quản trị. Bạn có thể muốn hạn chế chỉnh sửa cho hệ thống tập tin.

Trong khi điều này bao gồm việc tạo HTML, bạn cũng nên xem xét CSS. Người dùng cuối của bạn có thể thao tác CSS trực tiếp không? Họ có muốn không? Nếu các mẫu mặc định của bạn bao gồm đủ các lớp ngữ nghĩa, chúng có thể làm rất nhiều kiểu dáng mà không cần nhiều nỗ lực, nếu chúng biết chúng đang làm gì. Mặt khác, người dùng cuối của bạn có thể không biết CSS là gì, vì vậy họ có thể muốn, ví dụ: bộ chọn màu và lược đồ màu được tạo trước và trình chọn màu sắc và các thứ gây phiền nhiễu khác để tạo. Nó có lẽ là tốt nhất để suy nghĩ về những nỗi kinh hoàng bây giờ.


Những thứ khác.

Không CMS nào hoàn thành nếu không có khái niệm về bản nháp và trạng thái xuất bản. Tôi không có bất kỳ lời khuyên nào cho bạn ở đây, khác với mã số đầu tiên này. Nếu khách hàng của bạn hoặc người dùng cuối muốn bất kỳ loại lưu trữ lịch sử nào, cơ chế phê duyệt quản lý hoặc bất kỳ thứ gì khác làm cho bản nháp/xuất bản bất kỳ điều gì ngoại trừ một trường trạng thái đơn giản, bạn cần phải biết rất sớm. (Tôi đã bị cắn một cách khủng khiếp bởi cái này.Chúng tôi đã thiết kế toàn bộ hệ thống xung quanh một mô hình được xuất bản/không được xuất bản đơn giản và có khoảng 9/10 thông qua việc xây dựng đặc điểm và mã nguyên mẫu có liên quan khi chúng tôi nhận ra nó sẽ không hoạt động và chúng tôi phải làm điều gì đó xa phức tạp để thực sự đáp ứng yêu cầu của khách hàng. Việc xây dựng lại kế hoạch thô sơ là thời gian lớn nhất mà chúng tôi gặp phải hiện nay.)

Bạn có sử dụng ORM không? Nếu không, hãy chắc chắn sử dụng một thư viện giao diện cơ sở dữ liệu thích hợp. PDO, hoặc có thể là từ PEAR, hoặc có thể là Zend_Db. Bạn chắc chắn sẽ có một khách hàng sẽ nhấn mạnh rằng mã chạy trên Oracle hoặc MSSQL. Hoặc SQLite. Nó sẽ được tốt đẹp để nói với họ nó có thể được thực hiện (với một số nỗ lực). Tác giả plugin cũng sẽ cảm ơn bạn vì sự tỉnh táo. Đừng cuộn của riêng bạn.

(Sau đó, một lần nữa, với cấp độ đại diện của bạn, tôi mong rằng bạn đã quen thuộc với khá nhiều thứ tôi đã nói. Ah, những điều tôi làm để đánh lạc hướng bản thân mình trong khi nghĩ về các vấn đề mã hóa của riêng mình .. .)

+0

Cảm ơn câu trả lời tuyệt vời và rất hữu ích :) – Sarfraz

Các vấn đề liên quan