slogan3

Maak een op maat gemaakte plugin voor mijn Craft CMS-project

description

Met deze prompt kan de gebruiker een volledig aangepaste plugin bouwen die precies aansluit op zijn behoeften, waardoor hij functionaliteiten kan toevoegen die standaard niet beschikbaar zijn. Dit bespaart tijd en voorkomt dat je afhankelijk bent van externe plugins die mogelijk niet perfect passen.

prompt

Help me bij het ontwikkelen van een aangepaste plugin voor mijn Craft CMS-project. Mijn plugin moet de volgende functionaliteiten bevatten: <beschr ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een stapsgewijze handleiding voor het ontwikkelen van een Craft CMS-plugin die automatisch SEO-tags genereert en de sitemap beheert. --- ### Stap 1: Plugin aanmaken 1. **Plugin structuur opzetten** Gebruik de Craft CLI of handmatig maak een map voor je plugin onder `src/`: ```plaintext myseo/ ├── src/ │ ├── MySeo.php │ ├── services/ │ │ ├── SeoService.php │ │ └── SitemapService.php │ ├── controllers/ │ │ └── SeoController.php │ └── templates/ │ └── ... (indien nodig) ├── composer.json ``` 2. **composer.json** Maak een `composer.json` voor je plugin: ```json { "name": "jouwnaam/myseo", "type": "craft-plugin", "require": { "craftcms/craft": "^4.0" }, "autoload": { "psr-4": { "jouwnaam\\myseo\\": "src/" } } } ``` --- ### Stap 2: Hoofdbestand `MySeo.php` ```php <?php namespace jouwnaam\myseo; use craft\base\Plugin; use craft\services\Elements; use craft\events\ElementEvent; use yii\base\Event; class MySeo extends Plugin { public static $plugin; public function init() { parent::init(); self::$plugin = $this; // Hook voor automatische SEO-tags Event::on( Elements::class, Elements::EVENT_AFTER_SAVE_ELEMENT, function(ElementEvent $event) { // Alleen voor entry's if ($event->element->elementType === 'craft\elements\Entry') { $this->getSeoService()->generateMetaTags($event->element); } } ); // Cron of handmatige trigger voor sitemap // (hier kan je een controller of cronscript toevoegen) } public function getSeoService() { return $this->get('seoService'); } public function getSitemapService() { return $this->get('sitemapService'); } } ``` --- ### Stap 3: Services aanmaken #### `SeoService.php` ```php <?php namespace jouwnaam\myseo\services; use craft\base\Component; use craft\elements\Entry; class SeoService extends Component { public function generateMetaTags(Entry $entry) { // Hier definieer je je logica // Bijvoorbeeld: basis tekst, titel, beschrijving $title = $entry->title; // Generate meta description op basis van inhoud $description = substr(strip_tags($entry->excerpt ?? ''), 0, 160); // Stel meta tags in via craft\elements\Entry of via een plugin hook // Voor dit voorbeeld: opslaan in custom fields of gebruik element->setMeta() // Dit vereist dat je custom velden hebt of een manier om meta tags op te slaan } } ``` #### `SitemapService.php` ```php <?php namespace jouwnaam\myseo\services; use craft\base\Component; use craft\elements\Entry; class SitemapService extends Component { public function generateSitemap() { $entries = Entry::find()->all(); $xml = new \SimpleXMLElement('<urlset/>'); $xml->addAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9'); foreach ($entries as $entry) { $url = $xml->addChild('url'); $url->addChild('loc', $entry->getUrl()); $url->addChild('lastmod', $entry->dateUpdated->format('Y-m-d')); $url->addChild('changefreq', 'monthly'); $url->addChild('priority', '0.8'); } // Opslaan of teruggeven XML $xml->asXML(CRAFT_BASE_PATH . '/public/sitemap.xml'); } } ``` --- ### Stap 4: Registeren van services in `MySeo.php` In je hoofdbestand: ```php public function init() { parent::init(); $this->setComponents([ 'seoService' => \jouwnaam\myseo\services\SeoService::class, 'sitemapService' => \jouwnaam\myseo\services\SitemapService::class, ]); // Eventen en triggers zoals eerder beschreven } ``` --- ### Stap 5: Handmatige of geplande sitemap-generatie - **Handmatig**: Voeg een controller toe of een console command om `generateSitemap()` aan te roepen. - **Automatisch**: Gebruik een cronjob (bijvoorbeeld via server) om `generateSitemap()` periodiek uit te voeren. --- ### Best practices - **Veiligheid**: Zorg dat je geen gevoelige gegevens in meta tags zet. - **Performance**: Cache meta tags en sitemap als dat nodig is. - **Extensibility**: Maak je services uitbreidbaar door configuratie en hooks. - **Testing**: Test op verschillende entries en pagina’s. --- ### Samenvatting - Maak een plugin structuur. - Voeg event hooks toe voor automatische SEO-genereer. - Bouw serviceklassen voor SEO en sitemap. - Registreer services en hooks. - Trigger sitemap generaties via cron of handmatig. Als je meer hulp nodig hebt met specifieke code of integratie, laat het gerust weten!
provider: deepseek
model: deepseek-chat
Absoluut! Hier is een complete, praktische handleiding voor het ontwikkelen van een aangepaste SEO & Sitemap plugin voor Craft CMS, inclusief best practices en voorbeeldcode. --- ### **Stap 1: Plugin Setup & Structuur** Eerst maken we de basisstructuur voor je plugin aan. 1. **Maak de plugin directory aan**: Ga naar de `craft/plugins/` directory van je project en maak een nieuwe map aan, bijvoorbeeld `seosuite/`. 2. **Creëer het hoofdplugin bestand**: Maak een bestand `SeoSuitePlugin.php` in de root van je `seosuite/` map. ```php <?php namespace Craft; class SeoSuitePlugin extends BasePlugin { public function getName() { return Craft::t('SEO Suite'); } public function getVersion() { return '1.0.0'; } public function getDeveloper() { return 'Jouw Naam'; } public function getDeveloperUrl() { return 'https://jouwwebsite.nl'; } public function hasCpSection() { // Geeft een tabblad in het Control Panel return true; } public function registerCpRoutes() { return array( 'seosuite/settings' => 'seosuite/settings/index', ); } } ``` 3. **Activeer de plugin**: Log in op het Craft CMS Control Panel, ga naar **Instellingen** -> **Plugins** en activeer "SEO Suite". --- ### **Stap 2: Automatische SEO-tags genereren** We richten ons op het injecteren van `<title>`, `<meta description>`, en Open Graph tags in de `<head>`. 1. **Maak een Service aan**: Services bevatten de bedrijfslogica. Maak een map `services/` en daarin het bestand `SeoSuiteService.php`. ```php <?php namespace Craft; class SeoSuiteService extends BaseApplicationComponent { public function generateSeoTags($entry) { // Basis logica: gebruik entry titel en een standaard beschrijving // JE MOET DIT AANPASSEN OP BASIS VAN JOUW VELDEN/LOGICA $title = $entry->title . ' | ' . craft()->getSiteName(); // Haal een aangepast SEO-veld op of fallback naar een basisbeschrijving $description = isset($entry->seoDescription) ? $entry->seoDescription : 'Standaard beschrijving voor je website.'; // Maak een array met alle tags $tags = [ 'title' => HtmlHelper::encode($title), 'description' => HtmlHelper::encode($description), 'og:title' => HtmlHelper::encode($title), 'og:description' => HtmlHelper::encode($description), 'og:type' => 'website', 'og:url' => $entry->getUrl(), // Voeg afbeelding toe indien beschikbaar 'og:image' => ($entry->featuredImage && count($entry->featuredImage)) ? $entry->featuredImage[0]->getUrl() : null, 'twitter:card' => 'summary_large_image', ]; // Filter lege waarden eruit return array_filter($tags); } } ``` 2. **Integreer de tags in je templates**: In je hoofd template (bijv