kazah → created an issue.
Sorry, the problem was in Views Ajax History module.
Everything works.
Just create your custom module as usual and paste that code in module file.
Hello, @liquidcms!
Look at my last post:
https://www.drupal.org/project/feeds/issues/2978757#comment-15161715
✨
Support importing content with referenced paragraphs
Active
You can modify it for your own easy.
I have some specific use case, as I wrote above in #45 ✨ Support importing content with referenced paragraphs Active :
So how I manage to solve it.
If someone could provide the easier solution, you're welcome.
My specification:
1. Need to create paragraphs at the same time as nodes are imported.
2. Paragraph has two fields: title
(Entity reference) and quantity
(integer).
3. Csv file has this structure:
***Vendor code***Title***Berries
***n1***Cake 1***Strawberry, 2;Raspberry 1
1. Create custom module: paragraphs_import
2. Create paragraphs_import.services.yml
with:
services:
paragraphs_import.berries:
class: Drupal\paragraphs_import\EventSubscriber\Berries
tags:
- { name: event_subscriber }
3. Create Berries.php
in
paragraphs_import/src/EventSubscriber
with:
** all comments in code
<?php
namespace Drupal\paragraphs_import\EventSubscriber;
use Drupal\feeds\Event\EntityEvent;
use Drupal\feeds\Event\FeedsEvents;
use Drupal\feeds\Event\ParseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Reacts on articles being processed.
*/
class Berries implements EventSubscriberInterface {
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
$events[FeedsEvents::PARSE][] = ['afterParse', FeedsEvents::AFTER];
$events[FeedsEvents::PROCESS_ENTITY_PRESAVE][] = 'presave';
return $events;
}
/**
* Act on parser result.
*/
public function afterParse(ParseEvent $event) {
/** @var \Drupal\feeds\FeedInterface */
$feed = $event->getFeed();
/** @var \Drupal\feeds\Result\ParserResultInterface */
$parser_result = $event->getParserResult();
// Check if this is the feed type we want to manipulate.
// For i.e. my feed id cakes
if ($feed->getType()->id() !== 'cakes') {
// Not the feed type that we are interested in. Abort.
return;
}
/** @var \Drupal\feeds\Feeds\Item\ItemInterface */
foreach ($parser_result as $item) {
/**
* Get an item's value. Return result:
*
* array [
* 0 => "Strawberry,2"
* 1 => "Raspberry,1"
* ]
*/
$berries = $item->get('berries');
/**
* Separate values by comma. Return result:
*
* array [
* 0 => array [
* 0 => "Strawberry"
* 1 => "2"
* ]
* 1 => array [
* 0 => "Raspberry"
* 1 => "1"
* ]
* ]
*/
foreach ($berries as $key => $value) {
$explode_list[] = explode(',', $value);
}
/**
* Change title of referenced field with it nid
*
* array [
* 0 => array [
* 0 => "2082"
* 1 => "20"
* ]
* 1 => array [
* 0 => "2085"
* 1 => "10"
* ]
* ]
*/
$berries_array = array();
foreach ($explode_list as $key => $value) {
// get node id by title, filtered by type
$nid = \Drupal::entityQuery('node')
->condition('title', $value[0])
->condition('type', 'berries')
->execute();
// get only first result
$value[0] = array_shift($nid);
// make array global to use in presave function
global $berries_array;
$berries_array[] = $value;
}
}
}
/**
* Set corresponding values to paragraph fields.
*/
public function presave(EntityEvent $event) {
$entity = $event->getEntity();
// Load our paragraphs from field berries in node
$paragraph_berries = $entity->field_berries->referencedEntities();
foreach ($paragraph_berries as $key => $p) {
// Get global array setted in afterParse function
global $berries_array;
// match values from array with fields in paragraphs
foreach ($berries_array[$key] as $k => $v) {
if ($k == 0) {
$p->set('field_title', $v);
}
if ($k == 1) {
$p->set('field_quantity', $v);
}
}
}
}
}
4. In Feeds Tamper need to add plugin EXPLODE
with ; *semicolumn*
to our paragraph.
Thank you!
I'm waiting for the release of the boost to compare.
Will boost provide better perfomance than warmer module?
Yes, you are right.
Thank you in advance.
For those who need to show thumbnails in preview (for already uploaded images):
1. use this patch:
https://git.drupalcode.org/project/webform_dropzonejs/-/merge_requests/3/diffs
2.
Navigate to /webform_dropzonejs/src/Plugin/WebformElement/WebformDropzonejs.php
Declare your style, i.e. thumbnail: $style = \Drupal\image\Entity\ImageStyle::load('thumbnail');
Replace 'path' => $file->getFileUri()),
to 'path' => \Drupal::service('file_url_generator')->transformRelative($style->buildUrl($file->getFileUri())),
Still errors of unknown namespaces...
1.
To solve this
{{ drupal_view('myview', 'block_1') }}
I found that one views field with aggregated option breaks cache metadata. I remove it and now it works.
2.
I solve this issue:
{{ drupal_entity('webform', 'myform') }}
by adding lazyload to webform block (or you can install last version of webform).
Show warning message is good idea.
Thank you.
Thanks for the answer.
I just wanted to speed up the output of the module as best I can.
I used boost on Drupal 6 and it worked very well despite a bunch of settings.
Now Drupal 9 lacks this module.
Thanks for your work.