Drupal CMS

Drupal is een open-source content management systeem (CMS) dat wordt gebruikt voor het bouwen en beheren van websites en webapplicaties. Het is gebaseerd op PHP en biedt een scala aan functies en tools voor het maken van aangepaste websites en webapplicaties.

Het is dan ook één van de grootste spelers in CMS-land en dient voor meer dan duizenden bedrijven als platform voor websites. Al overtuigd van deze CMS-krachtpatser? Wij alvast wel.

Wat is Drupal?

Drupal is een open-source content management system (CMS) met Belgische roots. Het is een zeer veilig, flexibel en betrouwbaar platform en wordt ondersteund door een wereldwijde community van ontwikkelaars. Drupal is erg geliefd doordat ze eenvoudig aan te passen is en daarom uitmuntend geschikt is voor maatwerk. Denk maar aan het koppelen van je eigen CRM of software.

Omdat Drupal open-source is, wordt het actief onderhouden en ontwikkeld door een grote gemeenschap van ontwikkelaars en gebruikers, waardoor het voortdurend wordt verbeterd en geüpdatet met nieuwe functies en mogelijkheden.

Is Drupal de beste keuze voor jou?

Deze Belgische trots is een geweldig CMS voor uiteenlopende type projecten. Ben je niet zeker of Drupal wel de beste keuze voor jouw einddoel is? Geen nood. Nadat we bij onze verkennende gesprekken jouw business en klanten volledig uit de doeken hebben gedaan, bekijken we samen met jou welke technologie het beste bij jouw wensen en noden past.

make it fly - Drupal

Drupal als CMS

Drupal is een CMS dat al enkele jaren aan een steile opmars bezig is. Dagelijks werken er wereldwijd duizenden developers aan de uitbreiding van dit platform waardoor er ondertussen meer dan 15.000 (!) extra modules beschikbaar zijn. Drupal is een veelgebruikt CMS voor web en web app development.

Bij Duo zijn we overtuigd van de kracht die in het Drupal content management systeem schuilt en daarom gebruiken we dit vaak als basis voor onze web development. Hierop bouwen onze Drupal developers dan verder en programmeren modules op maat waarmee unieke, interactieve en gebruiksvriendelijke websites en webshops worden gecreëerd.

Enkele reden waarom je zou kiezen voor Drupal, op een rijtje:

  • je geniet van technologie dat met je meegroeit

  • garandeer de meest gebruiksvriendelijke ervaring

  • integreer eenvoudig interne systemen en externe tools

  • beheer centraal je inhoud en verspreidt via diverse kanalen (omnichannel)

  • profiteer van de flexibiliteit, vrijheid en mobielvriendelijkheid van je Drupal website

make it fly - Drupal

De voordelen van Drupal CMS

Deze krachtpatser brengt natuurlijk tal van voordelen met zich mee:

Gebruiksvriendelijk

Drupal zorgt ervoor dat je als eindgebruiker, die misschien niet over alle technische kennis beschikt, zelf gemakkelijk inhoud kunt wijzigen of toevoegen met behulp van een overzichtelijk en gebruiksvriendelijke gebruikersinterface.

Flexibel

Drupal is een zeer flexibel content management systeem, omdat het in staat is de inhoud van de website op basis van tags te organiseren in vooraf bepaalde categorieën. Elke node of content type kan bestaan uit uiteenlopende types inhoud: tekst, afbeeldingen, video, formulieren… Drupal - in tegenstelling tot vele andere content management systemen - kunnen we inzetten voor:

Een eenvoudige website die je huisstijl omarmt en je identiteit uitstraalt? Dan is een Drupal website iets voor jou. Overzichtelijk en makkelijk vindbaar.

Drupal biedt een krachtige en uitgebreide set functies voor e-commerce websites, zoals geavanceerde zoekfunctionaliteit, productcatalogi, winkelwagentjes, betaalgateways, en integratie met externe systemen zoals ERP en CRM.

  • Campagnewebsites of miniwebsites

Je merk echt in de kijker zetten doe je met je identiteit, positionering én een brand of campagne website. Alles wat je nodig hebt om je consumenten te informeren en met hen te communiceren heb je in handen. Daarbovenop geeft het je merk online een unieke look.

Uitbreidbaar

Drupal CMS heeft een modulair ontwerp. Door modules toe te voegen of op maat te schrijven kunnen onze developers handige functies aan je website toevoegen Deze modules kunnen eenvoudig geïmplementeerd worden en maken je website uniek.

Mobielvriendelijk

Het is natuurlijk belangrijk dat je website zich ook op mobiele toestellen perfect aanpast. Dit gaat het best als je website zich aan de grootte van het scherm aanpast, in het zogenaamde responsive webdesign. Drupal zorgt dat we op een vlotte manier een responsive design kunnen integreren. Op deze manier kunnen we je website op alle toestellen (smartphones, tablets en desktops) perfect weergeven.

Externe integratiemogelijkheden

Moeten bepaalde acties op je website ook met een bestaand systeem, zoals een ERP- of CRM-pakket, gekoppeld worden? Met Drupal is het perfect mogelijk om die koppeling te maken. Onze ervaring met diverse systemen zorgt ervoor dat de integratie met externe tools of applicaties, web services of backend-systemen steeds feilloos in je website geïntegreerd wordt.

Zoekmachinevriendelijk (of SEO-vriendelijk)

Een parel van een website moet kunnen gevonden worden door zoekmachines om organisch verkeer naar de website te brengen. Drupal behaalt telkens opnieuw zeer mooie resultaten bij zoekmachines door de uiteenlopende SEO-modules en optimalisatiemogelijkheden.

  1. Compatibility with dynamic field property translation

    Sven Decabooter

    Problem/Motivation

    I am using the "custom_field" module, for custom fields within Layout Builder blocks. To get those translated via the AI Translate module, the following patch is needed: #3529802: Don't hardcode 'value' key for textual field translation. Once this patch is applied, this works with this module, except for one code check, where the hardcoded 'value' property is checked.

    Proposed resolution

    Do not rely on the hardcoded 'value' property to be present.

  2. Don't hardcode 'value' key for textual field translation

    Sven Decabooter

    Problem/Motivation

    Currently, the logic in AI Translate module assumes all textual content to be translated is in the fields 'value' property. See \Drupal\ai_translate\Controller\AiTranslateController::translateSingleText().

    There are scenario's where text-to-be-translated will not be stored in the 'value' property though. Some examples:

    • Issue for link field translation: #3529669: Handle link field translation as well - although this works around the limitation by putting the link title into the 'value' property upon extraction. Only works if there is 1 property to be translated though.
    • #3529794: Add support for AI submodule "ai_translate" FieldTextExtractor plugin: Custom Field module, which allows any arbitrary name to be used for the subfield / property that gets defined.

    Proposed resolution

    Make the property name to extract part of the metadata, and set it dynamically, instead of hardcoded 'value' property? I haven't dug deeper into the full architecture, to know if this is possible...

  3. Add support for AI submodule "ai_translate" FieldTextExtractor plugin

    Sven Decabooter

    Problem/Motivation

    The AI module's submodule "ai_translate" provides content translation service through AI. It provides a plugin called FieldTextExtractor, which allows it to extract textual data from different kinds of field types, in order to pass those to an AI service for translation.

    Textual subfields provided by the custom_field module do not get translated through that mechanism, because there is no support for it in this module.

    Steps to reproduce

    - Install custom_field, ai & ai_translate modules - Set up a custom field with textual data - Try to translate an entity containing this field, via the AI translation mechanism

  4. When building a webform and saving elements the succes message is rendered behind the drupal sidebar

    Fons

    Problem/Motivation

    When building a webform and saving elements the succes message is rendered behind the Drupal sidebar.

    This is the topic for another discussion but I've always wondered why Webform has it's own way of showing messages instead of using the standard way that is provided in Drupal.

    Steps to reproduce

    Build a webform, add some form elements and click the save elements button.

  5. [5.0.0-alpha3] Menu items do not get is-active class

    Sven Decabooter

    I applied the MR logic from #3508748: [2.0.x] Add ability to track active menu items in menu source. Then in ui_suite_daisyui:menu component, I add a check:

    {% if item.in_active_trail %}
          <!-- Try adding extra class here -->
    {% endif %}
    

    That doesn't seem to work... Maybe I'm missing some additional context

  6. Support Drupal core DefaultContent API

    Sven Decabooter

    OK it should be possible after all I think.

    Say we can integrate with the contrib Default Content module, to produce output as follows:

    field_logos:
        -
          logo:
            entity_type: 'media'
            entity: eab657e0-3320-41d2-ab4e-53a09b397758
          link: 'https://google.com'
          link__title: ''
          link__options: { }
    

    (if not possible, worst case we need to document the exported YAML files have to be manually edited).

    Then in CustomFieldEntityReference::setValue(). we can do something like:

      /**
       * {@inheritdoc}
       */
      public function setValue($value, $notify = TRUE): void {
        $entity = $value['entity'] ?? NULL;
        // START ADDED LOGIC.
        if (is_array($value)) {
          if ($value['entity_type'] && Uuid::isValid($value['entity'])) {
            $entity = \Drupal::entityTypeManager()->getStorage($value['entity_type'])->loadByProperties(['uuid' => $value['entity']]);
            $entity = !empty($entity) ? current($entity) : NULL;
          }
        }
        // END ADDED LOGIC.
        if ($entity instanceof EntityInterface) {
          ...
       }
    

    I can spend some time to look further into this, but am currently time restrained, so just doing some braindump here. Will try to elaborate on it next week. Let me know if it would be a workable solution to extend the setValue() logic, for the use case of default content exports / imports.

  7. Support Drupal core DefaultContent API

    Sven Decabooter

    Did some more digging, and it seems the datatype used in custom_field module is "CustomFieldEntityReference", which does not inherit from core "EntityReference" data type, so guess this will never work :'(

  8. Support Drupal core DefaultContent API

    Sven Decabooter

    Problem/Motivation

    I have created a custom_field instance with the following properties: - logo: entity reference to Media entity - link: link field

    In a recipe, I'm using the Drupal core DefaultContent API to add default content upon application of the recipe. However, this does not work well with the custom_field I have.

    When I export the node containing this field (with the contrib Default Content module), I get something like:

    field_logos:
        -
          logo: 14
          link: 'https://google.com'
          link__title: ''
          link__options: { }
    

    Obviously directly linking to media ID 14 won't work, because the recipe will be installed on a site that might have different auto-increment IDs.

    I tried editing this to use the entity UUID, like other entity references exported via Default Content module:

    field_logos:
        -
          logo: eab657e0-3320-41d2-ab4e-53a09b397758
          link: 'https://google.com'
          link__title: ''
          link__options: { }
    

    This doesn't work either.

    Looking deeper into the core Importer class (\Drupal\Core\DefaultContent\Importer::setFieldValues()), I notice this only works for EntityReference data types: if ($property instanceof EntityReference) { ... } (full namespace = Drupal\Core\Entity\Plugin\DataType\EntityReference)

    I'm not familiar enough with the data model of custom_module, but I assume this uses something custom, instead of the core EntityReference data type, and thus does not set the value correctly. Would there be any way to make this work (without hacking core I presume)?

  9. Compatibility with block_uuid storage patch

    Sven Decabooter

    Problem/Motivation

    I am using the core patch #3180702: Export block UUID with custom Layout Builder blocks to store a block UUID in config, to allow Layout Builder blocks to be added via default_content export / import functionality.

    This does not work together with the logic in this module. The blocks do get translated via AI, but the translation is not correctly saved.

    Steps to reproduce

    Try this module with the patch mentioned above applied.

    Proposed resolution

    Some conditional logic could be added to make this work for sites that have this patch applied, while still working as expected for most sites that wouldn't have this patch applied.

Fons Vandamme

Gebruik Drupal als CMS voor een veilige en betrouwbare website die altijd up-to-date is.

Fons Vandamme
Drupal Architect & Sales manager

Met doordachte positionering scheppen we met Drupal een optimale visuele hiërarchie, cohesie en gebruiksvriendelijkheid.