ComputerMinds.co.uk: Migrating cropped images

Planet Drupal - Mon, 2023/03/13 - 1:15pm

One of our big Drupal 7 to Drupal 9 migration projects included bringing across image cropping functionality and data on a longstanding client's website. This site had used the Imagefield Crop module, but that was only for Drupal 7. We set up Image Widget Crop for the new site, which is better in a few ways but is also fundamentally different. The old site referenced the cropped images from content, only bringing in the originally-uploaded images for edit pages, to allow editors to adjust the cropping, which was then used wherever that image appeared on the frontend. The new Image Widget Crop module, however, allows configuring different crops for different situations. For example, the same image could be cropped one way for use as a widescreen banner, but another way for when it appears in a grid of squares (as in the following screenshot). 

The real challenge was in migrating the data! But we call ourselves Drupal experts, so of course we dug to find solutions. What we came up with might not work for everyone, but hopefully sharing this might help someone else that might be close enough to our situation. We found the following steps were necessary...

1. Set up the new configuration

Configure the crop types, cropping settings, fields and widgets etc for the Drupal 9 site to use, including an image media type. I won't go into detail here as there are already guides about how to do this - e.g. from the Drupal Media Team and OSTraining. What I'm focussed on is how to migrate the cropped images and their original files, and the references to use them in the right places.

2. Migrate files, including media entities, and references to them

The old site's files can be migrated into the new site easily enough. I then use the Media Migration module to create media image entities that reference those files. In my situation, it was fine to migrate the file IDs over and to use matching media IDs too. I expect this won't be an option on some projects but it made things much easier for me.

The Media Migration module uses 'dealer' plugin classes to cover different types of media, but its 'image' dealer plugin ignores images handled by Drupal 7's Imagefield Crop module. So I had to replace that with a custom plugin.

In general, I aimed to migrate the originally-uploaded image files (i.e. from before cropping was applied), and reference those from host content. That's how the new Image Widget Crop module usually references the images, whereas the Imagefield Crop module referenced the cropped image files. The Image Widget Crop module usually maps to the cropped images via the chosen 'crop type' referenced in image styles so that different crops can be used for the same field when output in different places. Therefore, any migrations for it will have to translate back from the IDs of cropped image files to the IDs for 'uncropped' ones.

A custom module's hook_migrate_prepare_row() did that file ID translation, and also skipped migrating cropped images as media entities. Since the cropped images won't be referenced from content, they would just clog up the media library as duplicates of the original uncropped images. Detecting which files were only cropped images that wouldn't be referenced from elsewhere was a bit tricky, and one of the slowest parts of my migrations. So I allowed file entities to be created for these cropped images, as I figured that didn't matter so much. I imagine these two bits could have been done better with specific plugin classes rather than this hook.

For migrating the right data into the media field on every node/entity that referenced croppable images, I made a custom process plugin to make use of that mapping of cropped-to-uncropped file IDs. So my node migration YAML files declared this plugin should be used to get the uncropped file ID on the destination, that corresponded to the cropped images' IDs on the source end, like this:

field_image: plugin: MYMODULE_precropped_image source: field_image

That plugin basically just looks up the ID of the cropped file from the translation map that was set by the hook_migrate_prepare_row() and returns the ID of the uncropped image file.

3. Migrate cropping data

I needed additional migrations for the data in every Imagefield Crop field about the dimensions and positioning of the crops themselves. These created 'crop' entities, using a custom source plugin for a database table that extended Drupal\migrate\Plugin\migrate\source\SqlBase. This allowed me to use a bundle filter in my migrations, so different crop types could be used in Drupal 9 for images on different content types that happened to use the same source field storage in Drupal 7. The YAML for these migrations is simple enough to share:

langcode: en status: true dependencies: module: - crop - MYMODULE id: d7_crop_field_image class: Drupal\migrate\Plugin\Migration migration_tags: - Content migration_group: migrate_drupal_7 label: 'Image crops from field_image, except for galleries' source: plugin: MYMODULE_imagefield_crop_table field_name: field_image bundle_filter: - article - blog_post constants: crop_type: 4_3_landscape target_entity_type: file process: type: constants/crop_type # Our source plugin sets precropped_fid. entity_id: precropped_fid entity_type: constants/target_entity_type uri: uri height: field_image_cropbox_height width: field_image_cropbox_width x: plugin: callback # The D7 module recorded the co-ordinate of the top left of the crop box, # whereas we want the co-ordinate of the very centre of the crop box. callable: MYMODULE_translate_crop_coordinate unpack_source: true source: - field_image_cropbox_x - field_image_cropbox_width 'y': plugin: callback callable: MYMODULE_translate_crop_coordinate unpack_source: true source: - field_image_cropbox_y - field_image_cropbox_height destination: plugin: 'entity:crop' 4. Mitigate missing features in the new site

The old and new modules have their own different approaches, which means they don't quite have feature parity. I actually think the new Image Widget Crop module has a better overall approach but our old site did make use of some settings unique to Imagefield Crop which we wanted to bring across. Most interestingly, as many of the old site's image fields were configured to use the same dimensions or aspect ratios, we could set up crops on the new site to be shared across those fields. However, there were a few fields that had slightly different constraints on 'input' despite appearing the same on 'output'. So we had to alter Image Widget Crop's widget (via two levels of #process Form API callbacks!) to apply different maximum post-cropping dimensions for certain contexts. Editors could bypass this fairly easily, but it covers the most common journeys that they would normally follow.

Mission accomplished!

After all that, you can probably see it was quite a complex challenge! A lot of code went into this, which I have shared barely any of here but if you find yourself in a similar scenario and need help, get in touch or leave a comment here. If anyone actually needs the PHP or YAML code, maybe I can look at packaging it up to share. But I know it's probably not generic enough to cover everyone's situations - I'd love to contribute it back to the community otherwise.

Categories:

The Drop Times: A Stitch in Time Saves Nine

Planet Drupal - Mon, 2023/03/13 - 7:57am

Today, a Telugu-language movie got the Academy Award for best original song at the Oscars. While accepting the award, music composer M. M. Keeravani mentioned that he grew up listening to the Carpenters. Although he meant Karen and Richard Carpenter, the American music sensation of the '70s, three major media houses in Malayalam, another south Indian language, translated it as woodworkers.

It should be a classic example of shoddy journalism. But such mistakes are not so uncommon in vernacular media. The phrase 'prima facie,' was once misconstrued as a lady's name. One hundred eighty-six people sleeping in the railway station had washed off in a flash flood in an old story when in reality, it was sleepers on which the rails were paved. The word magazines got mistranslated as the literal monthly magazine in a story about the seizure of arms from the Sri Lankan Tamil militia. However, the editor saved the grace by finding it out before printing. While reporting a death after a 'hot dog' eating competition, a newspaper thought the man had eaten raging canines. If this is how journalists write, a techy said he would be in danger if he told Python is his bread and butter.

Now excuse me. It is the new normal. Our media houses have lost editorial prowess. Speed before accuracy is the new-age motto. In such a speed-crazy world, having your editorial arm halved would be a significant loss.

We at TDT have witnessed such a loss. As mentioned in the last newsletter, NERD Summit, and DrupalCamp NJ will happen this week. As media partners for the two camps, we had many plans to execute. And a significant part of the plans revolved around a young journalist we had just hired, S. Jayesh

S. Jayesh is a name heard in both Malayalam and Tamil literary circles. He is a poet and short story writer who translated a few novels from Tamil to Malayalam. I knew him from his previous stints, where he was a workaholic and punctual, more productive than most, but would never do overtime as was the common practice in this part of the world. A polyglot having years of experience in online media, we hired him by the end of December.

On February 13, he fell on his back, involuntarily wounding his head. He was rushed to the hospital, had to undergo two neuro surgeries as his blood clot in his head, and was in a coma stage for more than two weeks. Fortunately, he has regained consciousness but must remain in the hospital. As he lacks medical insurance, his mother has taken to alms to fund his hospitalization expenses. She is seeking around $18,300 in USD or ₹1,500,000 in INR. Until now, she could collect only 32% of the same. Even if he gets discharged, it will probably take months for him to rejoin work. So we urge the Drupal community to pour your hearts in small amounts to help him in need.

The crowdfunding request is placed on Milaap.org, a fundraising platform for medical emergencies and social causes. The platform charges no intermediary fees, and every penny donated to Jayesh will go into his mother's account for the treatment of her son.

Coming back to the past week's stories. On March 08, Wednesday, we published an Interview with Rick Hood as a primer to the NERD Summit 2023. In this exciting interview, he not only discusses Drupal but also goes into his music production interests and his past boat business.

Evolving Web has announced a training on Drupal Site Building in April. On March 15, Acquia will host a webinar on Securing The Modern Digital Landscape, and on March 16, another webinar on CDP. Tomorrow, Design4Drupal Boston will host AmyJune Hineline for an accessibility webinar.

All but three sessions of DrupalCamp Florida are online on their YouTube channel. MidCamp 2023 has announced its sessions and speakers. DrupalCamp Finland started accepting papers. NERD Summit was still accepting training session submissions as a backup. They have also pushed out a call for volunteers. DrupalCamp Poland has put early bird tickets on sale. DrupalCon Pittsburgh is seeking sponsors to support Women In Tech. The last day to apply for a volunteering opportunity in DrupalCon Lille is tomorrow.

Project Browser Initiative collects feedback via google forms about what information is most valuable to you when "browsing" for modules on drupal.org. In celebration of Women's history month, Drupal Association highlighted the work of Nichole Addeo, the Managing Director and Co-founder of Mythic Digital. ICFOSS and Zyxware Technologies joined hands to impart Drupal training for women as part of the' Back to Work for Women' campaign. 

On blogs and training materials, visit Kevin Funk's article in Acquia Developer Portal about utilizing developer workspaces with Acquia Code Studio. Alejandro Moreno Lopez, the Developer Advocate at Pantheon Platform, shared an educational video about the benefits of using Drupal for a Decoupled project.

That is for the week. Thank you,

Sincerely,
Sebin A. Jacob
Editor-in-Chief

Categories:

Mike Herchel's Blog: Creating Your First Single Directory Component within Drupal

Planet Drupal - Mon, 2023/03/13 - 12:09am
Creating Your First Single Directory Component within Drupal mherchel Sun, 03/12/2023 - 20:00
Categories:

ImageX: From Discovery to Post-Launch: The Ultimate Guide to a Web Project

Planet Drupal - Fri, 2023/03/10 - 6:46pm
From Discovery to Post-Launch: The Ultimate Guide to a Web Project amanda Fri, 03/10/2023 - 17:46

In today’s digitally-focused world, it’s nearly impossible to do business without a presence on the world wide web. In fact, your website should be a cornerstone of your marketing efforts and a primary tool for reaching your audience.

For your site to effectively drive your business forward, it needs to be well-constructed and consistently maintained. That’s a big job. And it needs the right partner.

Our four-part process for website development is a proven approach to building an impactful online presence. Our ebook outlines the expectations and considerations for each distinct phase —  Discovery, Design, Development, and Post-Launch — so that you are well-prepared to build a website that will serve your business now and into the future.

/sites/default/files/styles/original/public/2023-03/pexels-rodion-kutsaiev-9436715.jpg.webp?itok=isGsjHz3 Feature as an event Off Service Category Design UX Design User Research Journey Mapping Web Design User Personas Usability Testing Strategy Discovery Website Audit Workshops Training Storytelling Analytics Digital Marketing Develop Evolve Site Growth Drupal CMS Support IsGated 0 IsDownloadable 1 Attachement link https://marketing.imagexmedia.com/acton/attachment/43677/f-1ffcfc1b-3705-49fa-b320-a060caa98e08/0/-/-/-/-/From%20Discovery%20to%20Post-Launch%3A%20The%20Ultimate%20Guide%20to%20a%20Web%20Project.pdf
Categories:

mark.ie: Creating different styles for subsites within a Localgov Drupal website

Planet Drupal - Thu, 2023/03/09 - 6:52pm

We've had lots of requests for changing the design of subsites in LGD. Here's how I'd do it.

Categories:

clemens-tolboom opened an issue in MikeSchulze/gdUnit4

On github - Thu, 2023/03/09 - 3:31pm
clemens-tolboom opened an issue in MikeSchulze/gdUnit4 · March 9, 2023 14:31 Update jquery (Windows bitdefender) #142

The used GdUnit4 version: Downloading directly from https://github.com/MikeSchulze/gdUnit4/archive/refs/heads/master.zip The used Godot version: O…

ImageX: International Women’s Day: An interview with the team

Planet Drupal - Wed, 2023/03/08 - 6:46pm
International Women’s Day: An interview with the team amanda Wed, 03/08/2023 - 17:46

This year’s IWD’s theme is #EmbraceEquity. This should remind everyone everywhere about the importance of creating a genuinely inclusive society, challenging gender stereotypes, and calling out biases. 

In the ImageX team, we are wholeheartedly aligned with these values and committed to fostering a truly equitable workplace. Even though tech is seen as a male-dominated industry, the Women of ImageX are key drivers behind the success of our organization. In celebration of this year’s day, we’re showcasing some of our team who are leaders in their areas; Mahya Golabi [design], Carol Pettirossi [development], Alla Petrovska [operations], and Kylie Aldridge-Ogden [delivery].  These four women are just a small snapshot of the awesome talent we are fortunate to work alongside everyday at ImageX, with each and every one of our women leading the way in their roles within a male dominated industry. 

Getting acquainted: roles and backgrounds

To start, the team shared their roles and how they ended up where they are today:

Carol, Software Architect: “I’m a female Drupal Architect that has been working in the Tech industry for 14 years. I started creating websites back in the day of blogs.

I studied programming in high school which gave me the opportunity to start my tech career before getting a university degree. I love working with sites and platforms, building the best experience for users so they can find information and perform tasks digitally whenever possible.”

Alla, HR & Operations Manager (Ukraine): “ I’ve been with the organization for 6 years already and being an explorer in my soul with a love to connect the right people with each other and make things work, I find ImageX the perfect match for me. It is a place with a multicultural team distributed over the globe where diversity is well represented."

Kylie, Senior Portfolio Director Not-For-Profit: “My passion lives in working with non-profits. I have served on a few Non-Profit boards throughout my career, spending seven years as Director at large for a national non-profit. At ImageX, I oversee the execution of all Project and Support Agreements within the vertical.” Mahya, Lead Designer: “I started with ImageX as a UI designer back in 2018. At that point, the design team only consisted of another designer and me, and there were only a handful of female employees here at ImageX, it’s incredible how that has evolved as we’ve grown.” Talking about the meaning of IWD

We then asked the team why International Women's Day is important to them.

Mahya: “As an immigrant, I believe, recognizing and celebrating the contributions of immigrant women to society can help promote inclusion and reduce stereotypes and prejudices. It can also provide a platform for immigrant women to share their experiences and advocate for their rights.

I think Women's Day serves as a reminder that women, regardless of their background, deserve equal rights and opportunities.”

The importance of diversity in the workplace

We were curious to know what the group thinks about diversity in the workplace, especially as it’s one of the intrinsic values of our international team.

 

Carol: “Women, as well as other underrepresented groups, bring diverse skill sets, viewpoints, and experiences to the workplace. Different cultures and experiences are proven to help businesses function better and also improve their processes. Each employee has their individual strengths and potential. Valuing the differences of others is what ultimately brings us all together and can be the secret to a successful, thriving workplace and a fair work culture.”

Mahya: “As a creative person, in my view, diversity brings in creativity and innovation: When people from different backgrounds and with different experiences work together, they bring different perspectives and ideas to the table. This can lead to more creative and innovative solutions to problems.”

Sharing their role models

Many women have a role model who inspires and drives them toward greatness. So who are the role models for the women of ImageX? 

Kylie: “From a professional standpoint, Sheryl Sandberg, the COO of Meta is one role model. I was introduced to her through her book, Lean In, which was recommended to me by a former male boss. Sheryl has a belief that echoes mine — if you’re going to have a family, make sure there is equity in the household. Another role model of mine is Heather Reisman, the CEO of Indigo. She was the first major female CEO in Canada and as an avid reader, I always kept an eye on her work. From a personal standpoint, my role model is my mother. I’ve always had a working mother and as a daughter, that is an amazing thing to witness.”

Mahya: “My mother is a strong entrepreneur who started as a teacher and now owns and directs three schools. She has shown me how to be an independent, strong woman when you are confident, resilient, and self-sufficient.”

Carol: “It would also be my mom. She is a symbol of resilience to me. She had a difficult upbringing and had to stop studying early. However, she overcame the difficulties and after I was born she decided to restart studying and become a nurse. She does night shifts at the hospital but she always enjoyed her job and taught me how important it is to love what you do.”

Alla: “My role model is all Ukrainian women: on the front line of the battlefield, or cultural, political, and social front lines — they all are fighting now for democracy, equity, freedom, and protection of human rights.”

Advice to women at the beginning of their career

It can be challenging to start a path in a new professional field, especially as a woman. How can women grow professionally and fight gender stereotypes in the workplace? 

Alla: “Listen to yourself and seek a role model or mentor. If you fail, learn from it - it is your opportunity to grow, don’t skip reflecting on it, as most likely you’ll fail over the same thing again in the future; have a plan…and a back-up plan.”

Kylie: “Never feel guilty to ask for what you need. While the pay gap is narrowing, more often than not, women who don’t get pay rises that mirror their male peers because they don’t ask for it. Make sure you advocate for yourself. Also, don’t internalize the labels and tropes that women are given in the workplace. For instance, “women are bossy while men are bold” or “women are emotional, men are direct”. We don’t need those, they’re not for us.”

Empowering other women in the workplace

Women can empower other women, lift them up, and help them grow. Together, they can be an invincible force. The women of ImageX have shared some useful ways they look toto empower other women in the workplace: 

Carol: “Providing mentorship and training to develop junior women into senior and leadership roles. Making sure that they are heard and have a seat at the table.  Making sure that there is an open communication mechanism for women to report on situations that they feel undervalued or not heard.”

Alla: “Be yourself, accept and respect others individuality; speak openly (everyone has their own strong and weak sides — be open about them); treat everyone fairly; be approachable, offer help and be ready to back up; don’t be afraid of speaking about the failures; celebrate wins together!”

Dinner with three inspirational women

Asking everyone to choose three inspirational women, dead or alive, that they would have dinner with was one of our favourite talking points. 

Kylie: “I couldn’t narrow it down to 3 so I have four:

1. Mary Wollstonecraft — She was the leader of the suffrage movement in England. She was fighting to make women people under the law. She was one of the pioneers that laid the groundwork for where we are today;

2 & 3. Gloria Steinem & Ruth Bader Ginsberg — Two feminist icons who have done more for gender equity and advocacy than anyone else. We wouldn’t have half the rights we have now without these two women. They worked together and were longtime allies, you can't have one without the other.

4. Michelle Obama — Who wouldn't want to have lunch with her? She built herself a platform and never took it for granted. She comes across as so humble and down to earth, and yet has this huge and beautiful platform that she uses for positive change.”

Carol: “1. Gloria Maria: She was a black Brazilian journalist that always talked about women being empowered. She represented the black community and had racism and feminism in her agenda. She also traveled around the world reporting different cultures. Can you imagine how wonderful a chat would be with her?

2. Susie Wolff: She is the Director of Formula 1 Academy and a former racing driver. She is now responsible for nurturing female talents in the sport. In such a male dominant field, it would be great to have dinner with her and learn how she deals with the challenges on a daily basis. 

3. Helena Rizzo: She is one of the best chefs in the world and the only Brazilian female chef leading a restaurant awarded with a Michelin star. Gastronomy is another field dominated by men and she excels in it. She is also involved in many charity and feminist initiatives.”

How organizations can #EmbraceEquity

The ultimate question that wrapped up our conversation was related to the IWD 2023’s #EmbraceEquity campaign theme. How do the team feel that organizations can create a culture which supports equity? 

Kylie:  “I read a 2022 study from PwC on Global Workforce Hopes and Fears. The largest workplace cultural contribution to equity that can be done is for a workplace to offer flexibility of schedule. One of the things that ImageX has done well is not only offer that but stand by it — giving their employees a flexible schedule and keep pushing equity forward. At ImageX, we do it without gender labels or bias, so that nobody is penalized.”

Mahya: "In my opinion it should be two areas:

1. Promoting transparency 

2. Identify biases in the organization and address them"

Alla: “Organizations can create a culture of equity by embracing it from the top — ensuring equal support and opportunities during the recruitment process; giving equal access to development opportunities upon employment; nurturing a strong sense of belonging to the workplace where differences are celebrated.”

Carol: “Providing an open communication culture where women in any position can admit to past failures and vulnerabilities without being judged. This culture paves the way for other women to have confidence that women in leadership are not super powerful. It helps everyone to understand that you can be yourself, you can fail, you can have feelings. An empowered woman doesn’t mean a Flawless and Perfect woman.”

And That’s a Wrap!

We are very grateful to Kylie, Mahya, Alla, and Carol for this wonderful conversation. Hopefully, their insights and answers resonate and shed light on gender equity, diversity, and the need to empower talented women in male dominated industries.

Wishing everyone a Happy International Women's Day! 

/sites/default/files/styles/original/public/2023-03/pexels-hasan-albari-1141678%20%281%29.jpg.webp?itok=_BM3l2ya Blog Category ImageX Feature as an event Off IsGated 0 IsDownloadable 0 ImageX Updates News
Categories:

Golems GABB: Illustration with Shapes

Planet Drupal - Tue, 2023/03/07 - 4:12pm
Illustration with Shapes Editor Tue, 03/07/2023 - 17:12

We are so interested in who you are. Are you a designer? We can suppose it as you are interested in this topic. However, it can be assumed that you are not. Basically, you may not even be related to design, and the last time you drew was in school. Did we guess? Whoever you are, we've written this blog for you!

Categories:

Specbee: How to Efficiently Fetch Drupal Reference Entities in Custom Modules

Planet Drupal - Tue, 2023/03/07 - 12:33pm
How to Efficiently Fetch Drupal Reference Entities in Custom Modules Jigish Chauhan 07 Mar, 2023 Subscribe to our Newsletter Now Subscribe Leave this field blank

Fetching Drupal entities and fields in custom modules is a critical part of building complex Drupal applications that require custom functionality. By understanding how to access and manipulate entities and fields programmatically, developers can create powerful and flexible modules that can handle a wide range of data-driven tasks. 

In this article, we will share tips and easy methods on fetching reference entity fields using entity API that will help you simplify your custom module development process.

Getting Back to Basics What are Entities?

Entities are the most core part of Drupal and it is important to understand what they are and how they work. They are objects that represent anything from users and nodes to taxonomy terms. Each entity has their own properties and can be customized or extended to fit the needs of a website.

What are Fields?

Fields make it easy to manage complex content structures. They are used to collect and display a variety of data like text, images, date and more which can be associated with an entity. For example, a content node can have multiple fields like a title, summary, body, image etc.

What are Nodes?

A node is a basic unit of content in Drupal. It can be a blog post, a product, a news article or an event. Each node has its own properties and can be organized into different types (or content types). A node can be used to create, edit, delete or categorize content.

Drupal Entity Reference Fields

Entity reference fields provide relationships between entities in Drupal. It stores references to another entity (a node, user, taxonomy, etc.). An example of a relationship would be:

  • A taxonomy term associated with a content type or user account.
  • A parent content that references a child content element.

It is commonly used in views and adding view relationships makes it quite easy to use reference fields. But the problem arises when fetching values of the reference fields in your custom module and custom theme.

The common method used to get a referenced entity is very long, so I will take you through a shorter solution.

For example, let's say we have a node object with a reference taxonomy field named field_specbee_term.

How it is usually done:

Method 1: // $id = Node ID // $field = 'field_specbee_term'; // field name for term reference field $node = Drupal\node\Entity\Node::load($id); // To get first value from multivalue field used first() method. $reference_item = $node->get($field)->first(); // \Drupal\Core\Entity\Plugin\DataType\EntityReference. $entity_reference = $reference_item->get('entity'); // \Drupal\Core\Entity\Plugin\DataType\EntityAdapter. $entity_adapter = $entity_reference->getTarget(); // \Drupal\Core\Entity\EntityInterface. $referenced_entity = $entity_adapter->getValue();

Here, $referenced_entity is the referenced entity object.

Now alternatively, instead of using the above tedious method 1, here is an easier way of doing it.

Method 2: $referenced_entity = $node->field_specbee_term->entity;

However, if you want to fetch all the values from the multivalue field, Method 2 will not work.

For loading the entire list of reference entities as objects will use the below method which is a type of array.

$referenced_entities = $node->get('field_specbee_term')->referencedEntities();

This method can be used for image reference as well. 

Let’s see an example of how we can get an image URL from a node with a specific image style.

// $fid = File ID $file = Drupal\file\Entity\File::load($fid); // Alternatively you can use direct node field. $file = $node->field_image->entity; $image_uri = $file->getFileUri(); // Get origin image URI. $style = ImageStyle::load('thumbnail'); // Load image style "thumbnail". $uri = $style->buildUri($image_uri); // Get URI. $url = $style->buildUrl($image_uri); // Get URL.

Now let’s understand how to retrieve any field values and which method is preferred for different scenarios.

// $id = Node ID $node = Node::load($id); $node->get(FIELDNAME)->value; // ALL VALUES - WON'T WORK IN REFERENCE FIELDS $node->get(FIELDNAME)->getValue(); // ALL VALUES $node->get(FIELDNAME)->getString(); // ALL VALUES

1. value :

This will return the actual value of the field but it will not work for any referenced field. 

2. getValue() :

When you need to get values of a field, whether it is a single-value or multi-value field, you can use this method. It will return an array of field values. 

3. getString() :

This method will return the value of a single-value field, and if it is a multi-valued field it will return comma-separated values.

Note: Sometimes when using getString(), if there is no value present, it will throw an error. This can be tackled by using the hasvalue() function before using the getString() function.

Final Thoughts

Fetching Drupal reference entities is an essential skill for Drupal developers. With the Entity API, you can easily load and manipulate entities and their fields, making your custom module development process more efficient and streamlined. However, if you need expert assistance with Drupal development, our team of experienced developers is here to help. Contact us today to learn more about our Drupal development services and how we can help you build powerful Drupal websites and applications that meet your unique needs.

Author: Jigish Chauhan

Meet Jigish Chauhan, Technical Architect, who’s fond of photography. He dreams of traveling to the playground of Europe, Switzerland, and loves to embrace the nature around him.

Email Address Subscribe Leave this field blank Drupal Drupal Module Drupal Development Drupal Planet

Leave us a Comment

  Recent Blogs Image How to Efficiently Fetch Drupal Reference Entities in Custom Modules Image Finding Balance - Santhosh Kumar's Parallel Worlds Image Migrate to Drupal 9 (or 10) Without Losing Your Hard-Earned SEO Ranking Want to extract the maximum out of Drupal? TALK TO US Featured Case Studies

Upgrading the web presence of IEEE Information Theory Society, the most trusted voice for advanced technology

Explore

A Drupal powered multi-site, multi-lingual platform to enable a unified user experience at SEMI

Explore

Great Southern Homes, one of the fastest growing home builders in the US, sees greater results with Drupal

Explore
View all Case Studies
Categories:

ComputerMinds.co.uk: Drupal 10 upgrade: Custom code upgrades

Planet Drupal - Tue, 2023/03/07 - 10:14am

This one is entirely on us, we wrote the custom code, which makes us responsible for maintaining it.

The upgrade status module gives us a nice report of each custom project and what changes it thinks are required to bring the code up to date to work with Drupal 10.

We really don't have a lot of custom module code, and the code that we do have is very simple, standard Drupal 8/9/10 stuff, so there are a couple of calls to taxonomy_term_load_multiple_by_name to remove, and an accessCheck to add to an entity query, but other than that our custom module code looked fine.

Our custom theme however, is a different story: we have some usages of jQuery once to remove, and we have a lot of custom Twig PHP classes that are extending deprecated classes. Nothing show-stopping, but a few things to do worth covering in more detail.

jQuery once

The jQuery once plugin has gone from core in Drupal 10, so we need to upgrade our javascript that is using it to use the vanilla javascript alternative that ships in Drupal 9: the once plugin. This is simple enough, we can rewrite code like this:

(function($) { Drupal.behaviors.smoothScroll = { attach: function (context, settings) { $('a[href*="#"]:not([href="#"])').once('smoothscroll').click(function() { if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { var target = $(this.hash); target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); if (target.length) { var offset_height = target.offset().top; $('html, body').stop().animate({ scrollTop: offset_height , }, 1000); return false; } } }); } }; })(jQuery);

Into code like this:

(function($, Drupal, once) { Drupal.behaviors.smoothScroll = { attach: function (context, settings) { var elements = once('smoothscroll', 'a[href*="#"]:not([href="#"])', context); $(elements).click(function() { if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { var target = $(this.hash); target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); if (target.length) { var offset_height = target.offset().top; $('html, body').stop().animate({ scrollTop: offset_height , }, 1000); return false; } } }); } }; })(jQuery, Drupal, once);

And then we need to tweak the definition of our library in the corresponding .libraries.yml file to remove the dependency on core/jquery.once and add one on core/once.

Twig changes

As mentioned previously the site was originally built in Drupal 8, which meant using Twig version 1, so there are plenty of deprecations to take care of to get the codebase ready for Drupal 10.

This is largely because we have a slightly strange setup in that we're using an early version of Emulsify to build our theme. Most importantly for this article it means that our theme contains quite a few twig functions like this:

<?php /** * @file * Add "getUniqueId" function for Pattern Lab. * * Brings the useful Drupal Html::getUniqueId function in. */ use Drupal\Component\Utility\Html; /** * Create the function we want to be able to call. * * Our function will be passed $context and then any other values provided. */ $function = new Twig_SimpleFunction('getUniqueId', function ($context, $string) { if (is_string($string)) { // Must cover the Drupal context AND the PatternLab context. if (class_exists('Drupal')) { return Html::getUniqueId($string); } else { return $string; } } else { return $string; } }, ['needs_context' => TRUE, 'is_safe' => ['html']]);

This can trivially become (changing the base class that is extended):

<?php /** * @file * Add "getUniqueId" function for Pattern Lab. * * Brings the useful Drupal Html::getUniqueId function in. */ use Drupal\Component\Utility\Html; /** * Create the function we want to be able to call. * * Our function will be passed $context and then any other values provided. */ $function = new \Twig\TwigFunction('getUniqueId', function ($context, $string) { if (is_string($string)) { // Must cover the Drupal context AND the PatternLab context. if (class_exists('Drupal')) { return Html::getUniqueId($string); } else { return $string; } } else { return $string; } }, ['needs_context' => TRUE, 'is_safe' => ['html']]);

The codebase has around 20 usages of deprecated Twig classes, however the task looks simple enough and there's nothing particularly tricky to do here, simply tweak the classes used per the deprecation messages in the older classes. There are automated tools that'll make these changes for you, but to be honest, there aren't that many changes to make and I'm keen to get eyes on the codebase more generally and get a feel for what we have in it!

All done

So that's it for Custom code and theme. We had actually been pretty good at:

  • Not writing custom code unless we had to.
  • If we did write custom code, not using already deprecated code.
  • Going back periodically and remediating new deprecations.

Which then makes these changes pretty straightforward. 

Aside: I'll just note that we have a lot jQuery style JavaScript in our codebase....mostly because we've been around for a while and learned JavaScript with jQuery, so it's just too easy for us to still write with jQuery everywhere. However, we know that we need to get to a place where we don't need jQuery and we'll get there, but we'll need to do some internal training on that and then go back through our code and re-write it without jQuery. Maybe I'll write an article about that too one day!

Categories:

Annertech: 8 tips and tricks for making migration easier

Planet Drupal - Tue, 2023/03/07 - 9:44am

Migrating at scale isn't for the faint of heart. Senior developer Erik Erskine reveals some neat tips that will ensure that your next migration is easier than you expect.
 

Categories:

Annertech: Migrating at scale? These are the tools you need to use

Planet Drupal - Tue, 2023/03/07 - 9:00am

Migrating at scale is daunting, but the right tools can make it easier. In this blog we draw on our experience from migrating 50 sites in one go.
 

Categories:

The Drop Times: An Accidental Web Developer: Interview with Rick Hood | NERD Summit

Planet Drupal - Tue, 2023/03/07 - 8:50am
Rick Hood is an organizer of the NERD Summit. TDT interviewed Richard Hood to also look into what the NERD Summit 2023 is all about. This is the first interview prior to the NERD Summit 2023.
Categories:

Five Jars: Building Microsites in Drupal

Planet Drupal - Tue, 2023/03/07 - 5:42am
By dividing applications into small, manageable parts, microservices can make development and deployment faster and more flexible. Now we’ll describe how to build microsites in Drupal based on our project for YMCA of the North.
Categories:

Lullabot: Getting Single Directory Components in Drupal Core

Planet Drupal - Mon, 2023/03/06 - 11:14pm

Working in the front end of Drupal can be difficult and, at times, confusing. Template files, stylesheets, scripts, assets, and business logic are often scattered throughout big code bases. On top of that, Drupal requires you to know about several drupalisms, like attaching libraries to put CSS and JS on a page. For front-end developers to succeed in a system like this, they need to understand many of Drupal's internals and its render pipeline.

Categories:

ImageX: Let’s Roll: How to Use Video to Engage and Inform Your Audience

Planet Drupal - Mon, 2023/03/06 - 10:19pm
Let’s Roll: How to Use Video to Engage and Inform Your Audience amanda Mon, 03/06/2023 - 21:19

Whether you’re scrolling through your social media feed or researching the latest marketing techniques, video content is ubiquitous. And for good reason. Video is an effective way to capture your attention and keep you coming back for more — all while entertaining and educating you in the process. 

But do you know how to effectively incorporate video on your organization’s website?

Video is undoubtedly an invaluable tool that distinguishes your brand. But there’s a difference between producing valuable content that cuts through the noise and simply adding to an already cluttered digital landscape. 

To provide a positive experience for your users and achieve your strategic objectives, you need to understand why using video is important and learn how to do it well. Let’s break it down.

Video Offers a Powerful User Experience

As users read less content word for word, video steps in as a tell-all tool. Through visuals, users can quickly digest content without having to slog through (or completely skip) long walls of text.

Video gets straight to the point — and to the heart — of the message you’re trying to get across. An incredible storytelling tool, video connects you to your audience. It evokes and underscores moods, ideas, and information in compelling and authentic ways through visuals, sounds, and imagery.

More than that, video is an essential way to offer accessibility-friendly content. Through closed captions and transcripts, you can offer a quality experience your entire audience can enjoy

Users can also search for answers to their questions via video. How many times have you searched YouTube (or even TikTok) to learn something new? People absorb information in different ways and need multiple avenues to promote learning — your users included.

Finally, video conveys the feeling and culture of your brand in a matter of seconds. It can show off a collective spirit or attitude without saying a word. And that means if you want your audience to feel the ethos of your brand, using video is a powerful way to convey that. 

Using Video Can Drive Traffic to Your Website 

Perhaps you’ve already created a video (or an entire library of them), but you find they’re not getting views and you’re not sure how to promote them effectively. How can you make sure users actually see your videos and come to your website as a result? 

Most brands choose to host their videos on a third party (such as YouTube, Vimeo, or Wisteria) for two reasons. 

  1. Video takes up space on your site. Hosting your videos on another site means ​​you're not saving all those video files on your server. This keeps your website running quickly and optimally.
     
  2. SEO benefits. As long as the video is linked back to the website, your video can be a great way to drive traffic to your site. Using a third-party site like YouTube (which is the second-largest search engine behind Google) also gives your brand more visibility and another way to be discovered.  

As you look for ways to get eyes on your content, don’t forget to use your own social channels. Right now that means TikTok and Instagram. Share your videos on the sites your target audience is likely to be on, and encourage users to share them.

Think strategically about how you can repurpose or reuse your content, like breaking videos down into teaser snippets to capture attention.

Two Video Formats to Incorporate Into Your Marketing Website

For marketing purposes, there are two main types of videos you can use to enhance your users’ experience: ambient and long form. It’s wise to use both different types of videos on your site based on the message you want to communicate and the goal you're trying to achieve.

Ambient videos are shorter and set the tone or feeling of a brand. They lay the groundwork for the story you’re trying to tell. For example, ambient video could be drone footage of a university campus or footage of people in a meeting to reflect their company’s culture. In other words, ambient video gives users a feel for what your brand is all about — sans dialogue.

Long-form videos tend to be more informative and provide more value. They often serve a specific purpose, such as showing users how to complete a complex task. This is especially helpful for visual learners. How-to videos can be extremely effective in reducing customer support inquiries and increasing conversions.

Use different types of videos on your site to complement the message you want to communicate and the goal you're trying to achieve.Dos and Don’ts of Using Marketing Videos on Your Website

Simply adding video content to your marketing plans isn’t enough. You need to be strategic and think through what you want your videos to achieve. Furthermore, there are plenty of best practices and nuances to consider that should inform your strategy. Here are a few recommendations.  

 

Do: Relax and go slow. Think about what’s achievable. You don’t need to hit the ground running with high-quality videos at every touchpoint. If you lack time, good content, or the budget to produce the robust video library you want, it’s okay. You have options. What matters most is that you build content to support the story that you're sharing. 

 

For example, you can use a static image that you can later swap out for an ambient video. Or, consider producing smaller snippets that you can use on social media to drive traffic to your channel until you build your content library.

 

Don’t: Neglect accessibility standards. Avoid elements like autoplay, modals, or overlays. because they take ‌control away from the user. And when it comes to upholding accessibility standards, taking control away is exactly what you want to avoid. 

 

A modal is a window that appears in the middle of the video and displays a specific message or image. An overlay is a transparent layer of branding or an interactive element that appears on the video. These features are easy enough to interact with for a user with a mouse or trackpad but are inaccessible to those who rely on their keyboard or other assistive technology.

 

Do: Know when to refresh content or keep it evergreen. Keeping videos relevant and accurately reflecting your message should always be top of mind. But you may not have to swap out videos as often as you think. The key is to look at your audience and think about what’s likely to compel them to convert. If you have a high number of returning visitors to your website, you should consider updating your content to keep things fresh. By contrast, if you get new visitors on a more cyclical, spread-out basis,‌ your video content can last longer. 

 

Don’t: Forget to measure the value of your video content. First, consider your video in the overall user journey. For example, if there’s a video touting a particular program deep within your site, you could measure success by looking at the number of conversions you receive on the corresponding call to action. For more straightforward feedback, incorporate surveys onto your site. Ask if the video achieved your objective for the user. This way you can learn what worked and what needs work. 

Consider best practices to guide how you approach your strategy.Make the Most Out of Your Website Experience With Video

Video is one of the most powerful marketing tools available. It increases engagement with your users and connects your brand to a larger audience. No wonder it’s everywhere. 

 

As you seek ways to set yourself apart, embrace video and all its strategic and creative possibilities. After all, you have a great story to tell — it’s time to tell it. 

/sites/default/files/styles/original/public/2023-03/sirisvisual-IcwAKUhNGXs-unsplash_0.jpg.webp?itok=gi2-qGlK Feature as an event Off Service Category Strategy Content Strategy Storytelling Digital Marketing IsGated 0 IsDownloadable 0
Categories:

Talking Drupal: Talking Drupal #389 - Headless - Fact or Fiction

Planet Drupal - Mon, 2023/03/06 - 8:00pm

Today we are talking about Headless and if it’s really all it’s cracked up to be with Martin Anderson-Clutz.

For show notes visit: www.talkingDrupal.com/389

Topics
  • What is headless
  • What started you writing the blog post
  • Where does headless make sense
  • Does headless perform better than Drupal
  • Are APIs always important
  • How does progressive decoupling work
  • Where does headless not make sense
  • Are people putting too much faith in headless
  • What is the future of CMSs
Resources Guests

Martin Anderson-Clutz - @mandclu

Hosts

Nic Laflin - www.nLighteneddevelopment.com @nicxvan John Picozzi - www.epam.com @johnpicozzi Jacob Rockowitz - www.jrockowitz.com @jrockowitz

MOTW Correspondent

Martin Anderson-Clutz - @mandclu JSON:API Search API Allows your headless Drupal site to also provide a search service.

Categories:

The Drop Times: Practice Makes Perfect

Planet Drupal - Mon, 2023/03/06 - 5:09pm

If you are a good swimmer, you would remember, in the beginning, how difficult it was to practice bubbling: the art of releasing air bubbles little by little and prolonging the time underwater without surfacing like a bloated balloon and not letting water in your nostrils, picking up a coin or a ring from the bottom of the pool in one quick motion. 

At least a few times, water would have gotten into your nasal channel, and you felt that chill in your head. And then suddenly, the trainer would say to float, holding your breath without bubbling, start kicking while holding your head down and hands straight, start exhaling while kicking, and turn your head to take a breath, then fashion your arms to have maximum thrust. Some cardio exercises might be recommended so that your lung capacity increases. 

These are all exercises to make you a natural swimmer, utilizing buoyancy and minimal friction against the current. But now, when you swim, you swim. You don't particularly remember bubbling, turning your head to inhale, or keeping your upper body motionless while utilizing your legs alone to push and hands to pull. 

The above is true about each thing that we master. It is the baby steps that matter. And once you are thorough, it comes naturally to you. To reach that level need patience and practice. 

DrupalCamp NJ and NERD Summit are around the corner. Local DUGs have announced several meetups. Drupal organizations have started training sessions. Now is the right time to get to practice, to immerse oneself in the pool of Drupal. 

The best story we published last week was the interview with DrupalCamp NJ speaker John Jameson. He speaks in detail about digital accessibility

Drupal Netherlands has announced DrupalJam 2023: Connected on June 01, 2023, at De Fabrique in Utrecht. 

DrupalCamp Asheville has called for training sessions, and you have time until March 28 to submit the topics for the July 7 event. With their neurodiversity initiative, you have multiple options to present your sessions. DrupalCamp Asheville has also requested help to organize the camp remotely. The DrupalCamp NJ schedule is live now. The DrupalSouth paper submission deadline was today and might have ended already. 

Meanwhile, Drupal Brisbane's March 02 event got canceled, although Melbourne Drupal Meetup scheduled for March 08 is on track. DrupalCon Pittsburgh Trivia Night was seeking sponsors. DrupalCon Lille has called for volunteers

Last Thursday, AmyJune Hineline presented a workshop, "Beyond 99 Red Balloons: A Guide to Alternative Text," at Women Who Code's Connect Empower event. On March 15, 12 pm ET, she will present a webinar for Design4Drupal Boston about Accessible Presentations. 

Drupal Bangalore will hold a Meetup on March 18, 2023. Drupal Pune had a meetup on March 3, 2023. Central NJ Web Developers are holding a meetup on March 10, 2023. 

We did a sneak peek into Axelerant's guide on accessibility compliance acts and standards. Another blog post we went through was a bit dated by Hounder.co about the need to migrate Drupal 7 sites to the newest version. Acquia Digital Freedom Tour is coming to New York as part of Acquia Engage on March 21, 2023. On March 23, they will promote Aquia DAM (Widen) in Los Angeles. Evolving Web has announced training for developers on Drupal Development Workflows from April 03 to April 05, 2023. A11yTalks will discuss the next generation of automated testing tomorrow (March 7). 

That is for this week. Thank you. 

Sebin A. Jacob
Editor-In-Chief

Categories:

Promet Source: How to Leverage Load Testing to Scale up a Drupal Site

Planet Drupal - Mon, 2023/03/06 - 4:27pm
Load-testing is an essential exercise to methodically test a Drupal site to ensure it can handle a high volume of traffic without encountering performance issues. In a previous post, we discussed how Locust can be used to simulate concurrent user requests and measure site performance.  This is a review of some additional load-testing solutions.  
Categories:

Salsa Digital Drupal-Related Articles: BenefitMe — coding NZ’s Social Security Act (Rules as Code)

Planet Drupal - Mon, 2023/03/06 - 1:03pm
Overview  Digital Aotearoa Collective’s  challenge The Digital Aotearoa Collective (formerly GovZero Aotearoa) wanted to use Rules as Code (RaC) to code NZ’s Social Security Act. This was an important project for the collective, which aims to address injustice and improve wellbeing in Aotearoa New Zealand. Digital Aotearoa Collective’s transformation Salsa donated NZ$20,000 and three team members (for a total of 24 hours a week for 11 months) to help build the first iteration of BenefitMe . Working with other key members, we started with rules analysis, before splitting into two teams: one focused on service design and building the frontend, and one focused on the OpenFisca rules coding.  In the last 6 weeks of the project, Salsa also contributed additional Drupal resources.
Categories: