למה אתה צריך תוסף Pico CMS מותאם אישית
תאר לעצמך: אתה צריך להוסיף טופס יצירת קשר מותאם אישית בכל הדפים של Pico CMS ששולח נתונים ל-CRM חיצוני. עם הכלים המובנים—רק חלקי Twig וטיפול ידני. ללא תוסף, תצטרך לערוך את הליבה, מה שמסכן התנגשויות בעדכון. הפתרון הנכון הוא לכתוב תוסף PHP מבודד, הניתן להתקנה דרך Composer. עשינו זאת ביותר מ-50 פרויקטים—מהפניות פשוטות ועד פורטלים ארגוניים מלאים. 90% מהלקוחות שלנו רואים הפחתה של 30% בזמן התחזוקה לאחר מעבר לתוספים מותאמים אישית.
עריכת הליבה של Pico ישירות מובילה לחוב טכני. בעדכון הבא של ה-CMS, השינויים שלך יימחקו, ואם תשכח מה שינית, האתר יישבר. תוסף חי בספרייה נפרדת, נטען דרך Composer, ואינו נוגע בליבה. זהו נוהג סטנדרטי בפיתוח PHP מודרני. לפי התיעוד הרשמי של Pico, תוספים הם הדרך העיקרית להרחבת פונקציונליות (https://github.com/picocms/Pico).
איך מערכת האירועים של Pico עובדת
כל תוסף Pico הוא מחלקה שמרחיבה את AbstractPicoPlugin. הוא נרשם לאירועים שה-CMS מפעיל בסדר קפדני: מטעינת קונפיגורציה ועד רינדור תבנית Twig. מתודות המטפל מקבלות ארגומנטים בהפניה (&$variable), מה שמאפשר שינוי נתונים בזמן אמת. 80% מהתוספים שלנו משתמשים ב-5 האירועים המובילים: onConfigLoaded, onRequestUrl, onMetaHeaders, onContentParsed, ו-onPageRendering.
<?php
class MyPlugin extends AbstractPicoPlugin
{
const API_VERSION = 3;
protected $enabled = true;
public function onConfigLoaded(array &$config): void
{
if (!isset($config['my_plugin'])) {
$config['my_plugin'] = ['option' => 'default'];
}
}
public function onMetaHeaders(array &$headers): void
{
$headers['redirect'] = 'Redirect';
$headers['auth_required'] = 'AuthRequired';
}
public function onPageRendering(string &$templateName, array &$twigVariables): void
{
$meta = $twigVariables['meta'];
if (!empty($meta['redirect'])) {
header('Location: ' . $meta['redirect'], true, 302);
exit;
}
}
}מקם את הקובץ ב-<?php class MyPlugin extends AbstractPicoPlugin { const API_VERSION = 3; protected $enabled = true; public function onConfigLoaded(array &$config): void { if (!isset($config['my_plugin'])) { $config['my_plugin'] = ['option' => 'default']; } } public function onMetaHeaders(array &$headers): void { $headers['redirect'] = 'Redirect'; $headers['auth_required'] = 'AuthRequired'; } public function onPageRendering(string &$templateName, array &$twigVariables): void { $meta = $twigVariables['meta']; if (!empty($meta['redirect'])) { header('Location: ' . $meta['redirect'], true, 302); exit; } } } . מבנה ספריות סטנדרטי:
plugins/ └── MyPlugin/ ├── MyPlugin.php ├── config.yml.template └── README.md באילו אירועים משתמשים הכי הרבה?
הנה נקודות הכניסה המרכזיות עבור Pico 3.x. אנו משתמשים בהן ב-90% מהפרויקטים שלנו.
| אירוע | תיאור | שימוש אופייני |
|---|---|---|
| onPluginsLoaded | כל התוספים נטענו | גישה לתוספים אחרים |
| onConfigLoaded | הקונפיגורציה נותחה | שינוי פרמטרים |
| onRequestUrl | כתובת הבקשה ידועה | הפניות, הגבלות |
| onMetaHeaders | רשימת כותרות YAML | הוספת שדות מטא |
| onContentParsed | Markdown → HTML | הכנסת קודי קיצור |
| onPageRendering | לפני רינדור Twig | הוספת משתנים |
דוגמה מעשית: תוסף הרשאת IP
public function onConfigLoaded(array &$config): void {
$this->allowedIps = $config['ip_restrict']['allowed'] ?? [];
$this->restrictedPaths = $config['ip_restrict']['paths'] ?? [];
}
public function onRequestUrl(string &$url): void {
$clientIp = $_SERVER['REMOTE_ADDR'] ?? '';
foreach ($this->restrictedPaths as $path) {
if (str_starts_with($url, $path)) {
if (!in_array($clientIp, $this->allowedIps, true)) {
header('HTTP/1.1 403 Forbidden');
echo 'Access denied';
exit;
}
}
}
}תוסף כזה שימושי לנעילת לוחות ניהול או סביבות סטייג'ינג. הוא רץ מוקדם—ב-onRequestUrl—וחוסם גישה לפני שעיבוד התוכן מתחיל, וחוסך משאבים.
הוספת קודי קיצור ומסנני Twig מותאמים אישית ב-Pico
Pico אינו תומך בקודי קיצור כברירת מחדל; הם מיושמים דרך onContentParsed. באופן דומה, ניתן להוסיף מסנני Twig מותאמים אישית דרך onPageRendering. אנו בונים את שניהם עבור הלקוחות שלנו.
public function onContentParsed(string &$content): void
{
$content = preg_replace_callback(
'/\[youtube\s+id="([a-zA-Z0-9_-]+)"\]/',
static function (array $matches): string {
$id = htmlspecialchars($matches[1], ENT_QUOTES);
return sprintf(
'<div class="video-embed"><iframe src="https://www.youtube.com/embed/%s" ' .
'allowfullscreen loading="lazy" title="YouTube video"></iframe></div>',
$id
);
},
$content
);
} סוגי תוספים: מה אנחנו בונים (פתרונות סוהר)
| סוג תוסף | מורכבות | דוגמאות | תמחור |
|---|---|---|---|
| מטפל באירוע יחיד | 1-2 ימים | הפניה לפי שדות מטא, הוספת Google Analytics | $200–$500 |
| פונקציות/מסנני Twig מותאמים אישית | 2-3 ימים | טופס יצירת קשר, סליידר מבוסס YAML | $500–$1,000 |
| אינטגרציית API חיצונית | 3-5 ימים | ייבוא מ-CRM, WebHook בעדכון תוכן | $1,000–$2,000 |
| לוגיקה עסקית מורכבת | מ-5 ימים | קטלוג מסונן, ניהול גישה | $2,000+ |
תוסף Pico מפותח פי 3 מהר יותר מהרחבה מקבילה של WordPress, בזכות ארכיטקטורת האירועים הפשוטה והליבה המינימליסטית.
טעויות נפוצות בפיתוח תוספי Pico
- סדר אירועים שגוי: למשל, שימוש ב-onContentParsed לפני onPageRendering—התוכן עדיין לא עובד.
- חוסר בדיקת קיום מערך:
plugins/MyPlugin/MyPlugin.phpעשוי לא להתקיים—השתמש ב-plugins/ └── MyPlugin/ ├── MyPlugin.php ├── config.yml.template └── README.md. - שימוש במשתנים גלובליים במקום בהפניות: פוגע בבידוד.
- שכחת
public function onConfigLoaded(array &$config): void { $this->allowedIps = $config['ip_restrict']['allowed'] ?? []; $this->restrictedPaths = $config['ip_restrict']['paths'] ?? []; } public function onRequestUrl(string &$url): void { $clientIp = $_SERVER['REMOTE_ADDR'] ?? ''; foreach ($this->restrictedPaths as $path) { if (str_starts_with($url, $path)) { if (!in_array($clientIp, $this->allowedIps, true)) { header('HTTP/1.1 403 Forbidden'); echo 'Access denied'; exit; } } } }אחרי הפנייה: הסקריפט ממשיך, וגורם לשגיאות כותרות. - אין בדיקות: התוסף עלול להישבר בעדכון Pico.
תהליך הפיתוח לתוסף Pico המותאם אישית שלך
אנו פועלים לפי נוהל ברור כדי להבטיח תוצאות צפויות:
- ניתוח — אתה מתאר את המשימה, אנו מבהירים פרטים ומעריכים לוחות זמנים (בתוך שעה).
- עיצוב — אנו מגדירים את רשימת האירועים, מבנה הקונפיגורציה ומשתני Twig.
- פיתוח — קוד ב-PHP 8.1+ עם PSR-12, מכוסה בבדיקות PHPUnit.
- בדיקות אינטגרציה — בדיקה על האירוח שלך או בסביבה קרובה לייצור.
- מסירה — אנו מספקים קוד מקור ברישיון MIT, תיעוד, תבנית קונפיגורציה ודוח בדיקות.
מה כלול בכל הזמנה
- קוד מקור של התוסף עם תמיכה בהתקנת Composer
- README עם הוראות התקנה וקונפיגורציה
- קונפיגורציית YAML לדוגמה
- בדיקות יחידה (PHPUnit) עם כיסוי של לפחות 80%
- 30 ימי תמיכה חינם: תיקוני באגים, ייעוץ
הבטחות ותמיכה
אנו מבטיחים תאימות לגרסאות העדכניות ביותר של Pico ו-PHP, וללא התנגשויות עם תוספים אחרים בזכות הארכיטקטורה המבודדת. כל תוסף עובר בדיקת קוד וניתוח סטטי. אם יש לך משימה לא סטנדרטית, צור קשר כדי לדון בפתרון. קבל ייעוץ לפרויקט שלך—נקבע את האירועים הנדרשים ואת לוח הזמנים בתוך שעה.
הזמן את פיתוח תוסף ה-Pico שלך היום—ננתח את המשימה שלך ונציע פתרון אופטימלי בתוך יום. צור קשר כדי לדון בפרטים.







