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. Set block entity values via FieldTextExtractor plugins

    Sven Decabooter

    Problem/Motivation

    Currently there is logic in LbAsymmetricExtractor that, for each cloned Layout Builder block, loops over the translated data, and sets the values for all fields on the cloned block, via the default Field API ->set() method.

    However, a more robust solution would be to use the appropriate FieldTextExtractor plugin for each of the fields to set their value, given their original data was extracted using this plugin, so it would make sense to have the value also being set by the same plugin. This allows each plugin to take care of their own special cases.

    This would for example add support for the custom_field module, where a Layout Builder block could contain a custom_field field. The FieldTextExtractor plugin for custom_field (being worked on in #3529794: Add support for AI submodule "ai_translate" FieldTextExtractor plugin would then take care of setting the current values.

  2. Notice: Debug: Drupal\Core\Render\Renderer::render with $is_root_call is deprecated in drupal:11.2.0 and is removed from drupal:12.0.0. After upgrading to Drupal 11.2

    Fons

    Can you test with the provided patches if it also fixes it for you? Here everything works now. Thanks!

    https://git.drupalcode.org/project/leaflet/-/merge_requests/59.patch

  3. [2.0.x] Add ability to track active menu items in menu source

    Sven Decabooter

    As reported in #3526471: [5.0.0-alpha3] Menu items do not get is-active class, this MR fixes the issue for me in ui_suite_daisyui for me, after adding some extra logic in the menu component of that theme.

    I think having active menu items is pretty basic expected behaviour for a theme, so would be good to get this included sooner rather than later. Having to patch both a module and theme to get a visual indicator of the active menu item, isn't the best situation for getting adoption IMHO. Therefor I took the liberty to increase the priority of this issue. Feel free to lower priority if you disagree.

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

    Sven Decabooter

    I fixed this by applying the patch in #3508748: [2.0.x] Add ability to track active menu items in menu source and adding the following to the ui_suite_daisyui:menu component:

    (...)
      {% for item in items %}
      <li{{ (not item.url and loop.first) ? ' class="menu-title"' : '' }}>
        {% set item_attributes = item.attributes|default(create_attribute()) %}
        {# Start adding class for menu active trail #}
        {% if item.in_active_trail %}
          {% set item_attributes = item_attributes.addClass('menu-active') %}
        {% endif %}
        {# End adding class for menu active trail #}
        {% if item.url %}
    (...)
    

    Not sure if this logic can already be incorporated into ui_suite_daisyui, while waiting on its commit in ui_patterns. It would be good to have this already in place by the time ui_patterns gets updated, but not sure what the policy is there...

  5. Notice: Debug: Drupal\Core\Render\Renderer::render with $is_root_call is deprecated in drupal:11.2.0 and is removed from drupal:12.0.0. After upgrading to Drupal 11.2

    Fons
    Fons added a comment on drupal.org: Notice: Debug: Drupal\Core\Render\Renderer::render with $is_root_call is deprecated in drupal:11.2.0 and is removed from drupal:12.0.0. After upgrading to Drupal 11.2
  6. Notice: Debug: Drupal\Core\Render\Renderer::render with $is_root_call is deprecated in drupal:11.2.0 and is removed from drupal:12.0.0. After upgrading to Drupal 11.2

    Fons

    I found two occurences and altered these to renderRoot(). This fixes the issue for me.

    https://git.drupalcode.org/project/leaflet/-/merge_requests/59.patch

  7. Notice: Debug: Drupal\Core\Render\Renderer::render with $is_root_call is deprecated in drupal:11.2.0 and is removed from drupal:12.0.0. After upgrading to Drupal 11.2

    Fons

    Problem/Motivation

    After upgrading to Drupal 11.2 I get the following notice:

    Debug: Drupal\Core\Render\Renderer::render with $is_root_call is deprecated in drupal:11.2.0 and is removed from drupal:12.0.0. Use Drupal\Core\Render\Renderer::renderRoot() instead. See https://www.drupal.org/node/3497318. in Drupal\Core\Render\Renderer->render() (line 218 of core/lib/Drupal/Core/Render/Renderer.php).

    Steps to reproduce

    Upgrade to Drupal 11.2 and visit a page that uses the drupal/leaflet module.

  8. Admin toolbar height is not 100% since upgrading to Drupal 11.2

    Fons

    Problem/Motivation

    When upgrading to Drupal 11.2 I noticed the admin sidebar height is not 100% anymore, before the upgrade this wasn't an issue.

    Steps to reproduce

    Upgrade to Drupal 11.2 on a website that uses the Core (Experimental) Navigation module.

  9. Local task name expectation in getFeaturedPageActions is fragile for determining Top Bar featured actions

    Sven Decabooter

    I'm not sure if this is the right place for this feature request, but I would propose to add an alter hook to the getFeaturedPageActions() method. In my case, I want a custom entity to have another "featured action", rather than the edit form. Currently I don't see a way to achieve this. IMHO core should provide sane defaults, but allow the option for contrib / custom module to change the default behaviour.

    EDIT: Just noticed this is a "TopBarItem" plugin, so I can probably achieve this with a custom plugin. Looking into that now.

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

    Sven Decabooter

    The logic in the MR now seems to work for most of the custom_field property types I have tested. Still WIP:

    • Link field is a challenge. The link itself gets translated currently, since it's a string. However source link https://google.com gets translated in my OpenAI instance to \nhttps://google.com\n, where the extra newline characters mess up the data. Ideally the link itself shouldn't go to translation...
    • Image alt / title texts do not get translated yet, because their property is not a string DataType, but rather an entity reference...
  11. Use property keys for custom_field theming

    Sven Decabooter

    Thanks for the commit!

    We use Single Directory Components in our themes, so using a custom template override allows us to render the custom_field through a SDC component. E.g.:

    {{ include('themename:card', {
      label: item['label'],
      title: item['title'],
      subtitle: item['subtitle']
      body: item['body'],
    }, only) }}
    
  12. Use property keys for custom_field theming

    Sven Decabooter

    Problem/Motivation

    The custom_field template has an "items" variable, which contains an array of subfield / property render arrays. The default implementation of templates/custom-field.html.twig just loops over each subfield / property and renders it.

    When trying to create an override template, we might want to render some subfields specifically, but that is currently not possible (except by doing some inspection of the array, not that easy to do in Twig), because the items array just has numeric keys.

    Preferably the "items" array would not have numeric keys, but use the subfield / property key. This way, specific properties can be correctly extracted from the "items" array, to specifically render it (e.g. when using SDC, each custom_field property could be an SDC "prop" or "slot".

    Steps to reproduce

    - Create a custom_field named "field_something" (unlimited values) with 2 properties, e.g: - "heading": Text (plain) 255 - not required - "text": Text (formatted) - not required - Override the specific Twig template for this field - e.g. custom-field--field-something.html.twig:

    <h2>{{ item[0] }}</h2>
    <p>{{ item[1] }}</p>
    

    - Use this field somewhere (e.g. on a node type), and fill in both properties. It works as expected. - Use this field somewhere else. and just fill in the "text" property. --> Now the body text is printed within the h2 tag...

    Proposed resolution

    Allow writing the example above as follows:

    <h2>{{ item['heading'] }}</h2>
    <p>{{ item['text'] }}</p>
    
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.