Axelerant Blog: How Acquia DXP Is Empowering Businesses To Design Digital Experiences

Image removed.

Introduction

Customer experiences are more than touchpoints. Instead, it’s about enhancing relationships and delivering value across the customer journey. A Digital Experience Platform (DXP) provides the architectural foundation and modular service that makes this possible. It enables organizations to deliver consistent, meaningful, and relevant experiences across all intersections.

Image removed.

Evolving Web: Hands-On With Drupal 10: Discover the Best Modules Through Project Browser

Image removed.

Drupal is famed for its flexibility and scalability. Any user can extend their website with an impressive array of contributed modules (nearly 50,000 at the time of writing!) thanks to Drupal’s modular structure and its thriving community of contributors.

But there’s a flip side to this abundance: selecting the right module can be a daunting task. It hasn’t helped that, until now, searching the full repository meant grappling with a long list of inconsistent descriptions on drupal.org. It’s a time-consuming process that intimidates new users and frustrates the seasoned ones (yes, even us!). And while search engines and recommendations helped, they often failed to give enough exposure to the newer and more niche modules. 

The opportunity was clear: users needed a fast, painless way to pick from the vast ‘candy store’ of contributed modules. 

We’re excited to say that the solution has finally arrived! Drupal users, meet Project Browser.

Project Browser: Your One-Stop Shop for Drupal Modules

Project Browser is a simple but powerful tool that will let you easily search, filter, review, and download the best modules for your needs. It’s currently in Beta, but the module is under active development and compatible with Drupal 10

Project Browser promises to be an essential add-on for site builders, web managers, developers, and anyone else who wants to leverage the full potential of Drupal.

Below, we explore the features and benefits of Project Browser that we’re most excited about.

Search Modules Without Leaving Your Site

With Project Browser, you can search the entire repository of contributed modules directly from your Drupal admin dashboard. Once you’ve installed it, simply go to the Browse tab that’ll appear on the Extend page. 

Project Browser is connected with the Drupal.org API using a decoupled approach to ensure content is updated in real time. 

Image removed.

Project Browser streamlines the process of selecting and downloading modules. Credit: Drupal.

Compare Modules at a Glance

Project Browser has a clean, user-friendly design that makes it easy to compare modules side by side. It displays your search results as tiles and lets you view them in list or grid mode. The tiles also feature category tags and a security policy icon. 

Image removed.

The modern, intuitive design makes it easier to review and compare a selection of modules. Credit: Drupal.

Only See Modules for Your Version of Drupal

The search results you see in Project Browser are automatically filtered by the version of Drupal you’re on. That way, you won’t waste any time reviewing modules that aren’t compatible with your website. 

Use Filters to Find the Perfect Fit

Project Browser applies default filters to ensure you only see maintained projects that are covered by a security policy – although you can remove these filters if you want. You can also filter by a wide range of categories such as accessibility, e-commerce, events, and location to name a few.

Image removed.

Narrow down your search results by applying filters. Credit: Drupal.

See Projects by Popularity

By default, Project Browser sorts your search results by active installs. This means you’ll see the more popular modules first, helping you find high-quality solutions faster. 

Get Clear Steps for Installation

Once you’ve found a suitable module, you can hit ‘View Commands’ to get instructions commands to download it via Composer and install it with Drush. 

Image removed.

Project Browser simplifies the installation process. Credit: Drupal.

Expect Even Easier Installs in the Future

Users will soon be able to download modules automatically with Composer running behind the scenes. An experimental version of Project Browser has been set up to develop this functionality. You’ll be able to hit “Download and Enable” on your selected module and let Project Browser do the rest.

Want to Master the Fundamentals of Drupal?

Join our upcoming Drupal for Content Editors training session. Our expert instructors provide hands-on exercises, live demos, and actionable advice to help you excel in your role. You’ll come away from this session with a solid understanding of how to implement a strong content strategy and use Drupal’s content publishing system effectively.

//--> //-->

+ more awesome articles by Evolving Web

ComputerMinds.co.uk: Drupal 10 upgrade: File to media

Image removed.

We're continuing our series on upgrading this very website to Drupal 10...but our first proper bit of work to upgrade this site is essentially nothing to do with Drupal 10!

We built this site in the early days of Drupal 8 and Drupal core didn't really handle 'media' any differently to Drupal 7, but we wanted to try out some new modules that included having a library and drag&drop upload. However, these modules are an additional thing that we need to upgrade and have been pain in that sometimes the buttons don't appear, or they're buggy in other ways. Anyway we're going to replace our previous way of doing media handling, with the way that Drupal 8.5 introduced: the media module. To be perfectly honest we could (and maybe should) have done this piece or work a long time ago, but we simply never got around to it. Anyway, here's an idea of what we had before:

On lots of our entity bundles, we had file and image fields, these were named something like field_background_image for example. This would hold the image that was eventually styled into the title header banner at the top of the page. We wanted a nicer experience for uploading and selecting files to use than the core offering at the time. 

We had settled on using the File Entity Browser module which brings with it a lot of dependencies, but then does give a relatively nice experience that looks a bit like this:

Image removed.Our File entity browser based upload widget

You get a drag & drop upload, and you get to pick files from a grid of files if that's what you want.

This is all well and good, but Drupal core basically does all this now, via the media module, so how do we get to this:

Image removed.The Drupal core media upload widget

To get there, we're going to have to:

  • Enable the core media and media library modules
  • Set up our media types that we want to use
  • Create duplicates of our current file/image fields, but as media fields
  • Switch our templating/PHP code over to use the new media fields
  • Write some kind of data migration to create new media entities for existing files and update the content to reference the new media entities
  • Delete the old fields.

I appreciate that there are modules out there that can help with some of this, but none of them seemed to work quite right for me when I'd tried in the past, and they seemed to get hung up on things like deduplication of files, which I wasn't particularly bothered by.

Setting up core media

This is, by far, the easiest bit: I enable the media module, and then grab the media related config from the core demo umami profile, since that has and image and document media entity all set up and ready to use. I grabbed the following config files:

  • media.type.image.yml
  • media.type.document.yml
  • field.storage.media.field_media_image.yml
  • field.storage.media.field_media_document.yml
  • field.field.media.image.field_media_image.yml
  • field.field.media.document.field_media_document.yml
  • core.entity_form_display.media.image.default.yml
  • core.entity_form_display.media.document.default.yml

And import them into this site, just as a super quick way to get going with a simple set of config that would enable core media handling.

Duplicating fields

Now for the tedious part: duplicating all those lovely file/image fields with media field equivalents. To get a nice list of the entity bundles that needed this work doing, I went to uninstall the File entity browser module, and Drupal gives me a nice list of the config that would need to be updated. This is essentially a list of bundles where we'd set up our file upload widget that I needed to swap out.

So, I go one by one looking at each bundle, and where there was a field named like: field_background_image for example, I'll create a new entity reference field called: field_background_media and set it to reference media entities. Then I set it to use the media widget, and matched its position and settings on the entity form and entity display modes. I did do this manually, but I imagine this would be fairly simple to automate, but I only had a handful of fields, and I went slowly and carefully with the next bit anyway, making sure to test each of my new fields.

In our theme layer, we do a decent amount with some of the files referenced by these fields, for example the background images for the page headers, get processed by some custom code that generates some specific inline CSS. So I searched the codebase for usages of these field names, and switch them over to the new fields. Being careful that now there was an extra level of entity in the structure of the data, since before I'd have had:

Host entity -> image field -> File entity -> Actual URL to image

But now the new fields will have:

Host entity -> media field -> media entity -> image field -> File entity -> Actual URL to image

This is actually pretty easy for this site, because we'd nicely separated out getting the image from the templates themselves, so this step was fairly straightforward in the end, it was fairly repetitive though. I duplicated a field, found all usages of it, changed them and then tested the code to make sure it was all working properly.

Data migration

Now we have the duplicated fields, and we know they all work we need to get the data into them. We're going to load up any entity that references a file in one of the fields we've duplicated, loop over all the fields, and where there's a file we'll create a new media entity that references this file and insert this into the field on the outer entity. We'll save each entity as we go.

We don't have that much content on this site, so we can run these in an update hook, and the site will be down for a minute or so running the update hook, but that's okay for our use case. Other sites might require a different approach.

Without further ado, here's our code:

/** * Migrate image fields to media fields. * * @param string $entity_type_id * The entity type id. * @param array $image_field_map * An array of mappings, each sub array should have the following keys: * - source: The source image field name. * - destination: The destination media field name. * - media_bundle: The media bundle to create. * @param string|NULL $bundle_id * The bundle id. * * @return void */ function computerminds_core_migrate_to_media_helper(string $entity_type_id, array $image_field_map, string $bundle_id = NULL): void { $entity_storage = \Drupal::entityTypeManager()->getStorage($entity_type_id); // Construct a query to find all entities with the image fields. $entity_query = $entity_storage->getQuery(); if (isset($bundle_id)) { $entity_query->condition('type', $bundle_id); } // We don't want to check access. $entity_query->accessCheck(FALSE); // Add a condition for each image field. $field_conditions_group = $entity_query->orConditionGroup(); foreach ($image_field_map as $field_map) { $field_conditions_group->exists($field_map['source']); } $entity_query->condition($field_conditions_group); $entity_ids = $entity_query->execute(); // Process in chunks of 10. foreach (array_chunk($entity_ids, 10) as $entity_ids_chunk) { foreach ($entity_storage->loadMultiple($entity_ids_chunk) as $entity) { // Process each image field. foreach ($image_field_map as $field_map) { $image_ids = $entity->get($field_map['source'])->getValue(); $entity->set($field_map['destination'], NULL); foreach ($image_ids as $image_id) { $file = \Drupal::entityTypeManager() ->getStorage('file') ->load($image_id['target_id']); if (!$file) { $message = 'Media cannot be created. The %entity_type_id with ID: %entity_id of bundle: %bundle refers to the image file with ID: %fid. But there is no information about the file with this ID in the database.'; \Drupal::logger('image_field_to_media')->error($message, [ '%fid' => $image_id['target_id'], '%entity_type_id' => $entity_type_id, '%bundle' => $bundle_id, '%entity_id' => $entity->id(), ]); continue; } $media_data = [ 'bundle' => $field_map['media_bundle'], 'uid' => $file->getOwnerId(), 'created' => $file->getCreatedTime(), // @TODO: Make this work for languages. ]; // Asign the file to the correct field. switch ($field_map['media_bundle']) { case 'image': $media_data['field_media_image'] = $image_id; break; case 'document': $media_data['field_media_document'] = $image_id; break; } $media = \Drupal\media\Entity\Media::create($media_data); $media->save(); $entity->get($field_map['destination'])->appendItem($media->id()); } } $entity->save(); } } }

Note that I've hardcoded this with our specific fields on our media entities.

We can then call this helper like this:

function computerminds_core_update_9114() { $entity_type_id = 'node'; $bundle_id = 'article'; $image_field_map[] = [ 'source' => 'field_banner_image', 'destination' => 'field_banner_media', 'media_bundle' => 'image', ]; $image_field_map[] = [ 'source' => 'field_mobile_banner_image', 'destination' => 'field_mobile_banner_media', 'media_bundle' => 'image', ]; $image_field_map[] = [ 'source' => 'field_files', 'destination' => 'field_attachments', 'media_bundle' => 'document', ]; computerminds_core_migrate_to_media_helper($entity_type_id, $image_field_map, $bundle_id); }

I then went through and wrote an update hook for each entity type and bundle combination that I needed, following the same boilerplate pattern of an array of fields to map.

Once the update hooks have run, then I was able to check each of the bits of content and see that the media entities had been created correctly, and added correctly added to the entities.

Delete the old fields

The fun, last step! Deleting the old fields: which will remove the field data from the content entities, but not the actual file entities themselves, so they'll still be around to be referenced by the media entities.

This then also allows me to uninstall the File entity browser module, and then the Entity browser, Entity embed module and Dropzonejs module, big win because we now have many fewer modules to upgrade.

Deployment

Our deployments do this:

  1. Run database updates
  2. Import config
  3. Rebuild caches

To deploy this work, I committed each of the above steps, along with their exported config, to git. Then I was able to deploy each commit in turn, so that the site briefly had lots of empty media fields, and wasn't showing any images, but then minutes later had all the content migrated and then finally all the old fields and modules were gone. Oh, I also took a full backup before I started these deployments!

That's it for the first big step on the road to Drupal 10 for this site, but I have to reflect and say that having done similar types of data manipulation in Drupal 7, Drupal 9 makes this stuff much, much simpler!

ImageX: Compelling Content Marketing for Higher Education Websites

Compelling Content Marketing for Higher Education Websites amanda Wed, 03/01/2023 - 16:53

When a prospective student is making the choice of where to study, their first point of call is more often than not, the institution’s website. It’s where they learn about the exciting study programs, the bustling campus life, and the unique university vibe. Engaging text in combination with catchy visuals helps them find the answer to the main question: “Is this the right choice for me?”. That’s why the role of your website and content marketing is unmatched when it comes to boosting student enrollment and helping your higher ed institution stand out from its numerous competitors.

 

How can you make your university or college site genuinely attractive and informative for students, as well as for staff, faculty, parents, donors, and alumni? When it comes to best practices for higher education websites, content marketing is one of the most interesting topics to discuss. We’ve collated some of the ImageX team’s recent articles filled with content tips for higher education below.

 

Create vibrant, student-focused content

 

Although factors like university size, location, available majors, and costs are important, prospective students primarily base their decisions on emotion. Your homepage might be great at creating that “big-bang” first impression, which makes students’ hearts sing and lets them know they belong to this place. However, by navigating deeper into a higher education institution’s website, students are often faced with long and dull walls of text.

 

No worries — it’s totally possible to breathe life into your university site and turn it into a vibrant content hub! To begin with, you will need to assess your current pieces and decide what to keep, what to rework, and what to cut. These decisions need to be data-driven, so you might want to rely on marketing analytics platforms, research, and testing. Next, establish the content creation guidelines and move forward.

 

To fill your university website with vibrant voices, you could gather informal news from your students’ social media, create a submission form for club leaders to share announcements, and transform the lofty prose from researchers using everyday, easy-to-read language. Another great idea is to create interactive features so prospective students can get a feel of your campus

Image removed.Breathe life into your university site and assess your current content to decide what to keep, what to rework, and what to cut.

 

Embrace digital storytelling

 

We all love good stories. This love starts in our childhood when stories help us comprehend the world, and it accompanies us through our adult lives as we become prospective customers of various organizations. That being said, it shouldn’t come as a surprise that there is an ongoing content marketing trend to craft unique narratives with the organization’s audience as the main heroes. These compelling stories engage customers and inspire them to make conversions.

 

Your university could tell its impactful stories, too, and we are happy to guide you through the best storytelling practices. Since the rule of thumb is to center your narratives around your audience and their needs, the heroes of your stories could be your prospective students, current students, alumni, and so on. You could also dig deeper into exploring your audience and create more detailed “user personas” — for example, “a student who wants to study abroad in North America.”

 

Image removed.The heroes of your stories could be your prospective students, current students, alumni, and so on.

Storytelling 101: How to Create Website Content that Resonates With Your Audience.”

 

 

Be open to users with special needs

 

When crafting great content that reaches your university website’s audience, you need to give every user a chance to perceive it, even if they rely on assistive devices. Considering the diversity of audiences and the existing accessibility laws, creating an accessible website is a top priority in higher education, so you might have already implemented some accessibility guidelines with the help of a good design and development team.

 

However, accessibility is not created solely by website design and development experts. Website content also needs to be produced with accessibility in mind. A content marketing team’s contribution to website accessibility can be huge.

 

What does accessible content creation mean? We recommend starting with empathy and always thinking about how people with different abilities will experience your higher education site’s content. Next, take care of straightforward language, clear structure, ALT tags, descriptive links, transcripts and captions for audio and videos, HTML pages to replace inaccessible PDFs, etc. Finally, check your pages with third-party accessibility tools. See more useful details in our Top 10 Accessibility Tips for Content Editors.

 

Divide the “Herculean task” into chunks

 

In the previous chapter, we discussed the importance of creating accessible content and some of the best practices it involves. Ok, so you have a huge higher education website with innumerable pages for faculties, departments, programs, admission requirements, news, events, and so much more. Moreover, multiple people from different teams are involved in content creation. In this situation, making all the website’s content accessible may look like a Herculean task.

 

Instead of trying to make up a long list of problems that need to be addressed, we suggest taking an Agile approach. Originally created for developers, the Agile methodology has its values and principles fully applicable to any industry.

 

Based on this approach, you can transform the Herculean tasks into doable chunks on which you will be able to see meaningful progress. Set your priorities, or choose the most impactful pages to be updated first, then do the work in short cycles also known as sprints. However, in the future, you can prevent content accessibility issues from occurring so you don’t even have to deal with a Herculean task. Organize training for your staff and commit to continuous improvement — one of the Agile principles. 

 

“Humanize” your higher education content

 

Today, a learning environment needs to be inclusive and welcoming, as well as foster a sense of belonging. Creating inclusive content on your higher education website could greatly help you achieve this result. You need to consider the diversity of your university’s audience and craft messages that appeal to as many of its segments as possible, be it prospective students, parents, or other target groups. 

 

One of the ways to be on the same wavelength as them is to use their language. Another useful idea is to create stories where different groups of people are equally represented, which could help everyone recognize themselves. Consider also using diverse content formats to tailor to different preferences and abilities when it comes to consuming the information.

 

Whatever the techniques are, it all comes down to having a people-first approach to content marketing. Check out our article called “Humanize Your Higher Ed Website with Inclusive Content” for more information and tips about it. And never miss an awesome example of our customers — Ashland University — that created an inclusive digital space and emphasized their “We See You” philosophy.

 

Use the editorial features of a good CMS

 

Higher education websites have countless content pages that need to be updated regularly. Managing them all on a day-to-day basis is an arduous task for any marketing team. However, your website’s CMS can be a game changer in this area if it plays on your side. You just need to choose a platform that makes your editing workflows as robust, user-friendly, and intuitive as possible. Drupal could be your best choice here. 

 

Content in Drupal has a well-defined structure where the information about different content types, such as articles or events, is stored in standard sets of fields. The user-friendly admin dashboard makes it easy to manage pieces of different types across the entire website.

 

Drupal is endlessly flexible in enabling you to create various content layouts, as well as using ready components. One of the great examples of ready-to-go blocks is the starter kit by our team. It includes the most common block types such as an accordion menu, a carousel, a ping-pong block, and much more. 

 

Try alternative content sources 

 

All the content marketing tips and recommendations could create an impression that you and your marketing team always need to be perfect in providing large amounts of fresh, engaging, accurate, and accessible content. What about having enough time for producing it? One of your university faculties might invent the time machine someday, but before they do it, you need to find other solutions.

 

One of the secrets is you don’t have to create absolutely everything from scratch. There must be some podcast episodes, YouTube or TED videos, SlideShare or eLearning presentations, or other media on the web that could be useful to your university’s students. In addition, there are news, articles, or press releases from trusted sources that could keep your higher education site’s audience up-to-date on important events, discoveries, trends, and more. Finally, as we touched upon in the first chapter about making your site more vibrant, you could try exploring informal sources like students’ social media.

 

Gathering relevant third-party content and sharing it on your site is known as content curation. While implementing it, it’s best to not just share but provide a brief introduction to the shared pieces. Our article on smart content curation shares more tips and tricks for it describes its benefits, as well as walks you through the specific steps to get started. 

 

Final thoughts

 

There is always something new to learn about impactful content marketing for higher education.  So we are more than happy to be constantly discovering and sharing useful tips about it. Stay tuned for more article collections, and just reach out if you need any assistance or want to talk through your requirements. 

/sites/default/files/styles/original/public/2023-03/pexels-karolina-grabowska-8106661.jpg.webp?itok=qvV3HPwN Feature as an event Off Service Category Strategy Content Strategy Storytelling IsGated 0 Verticals Higher Education IsDownloadable 0