PluginProbe
Elementor Website Builder – more than just a page builder / 3.34.0-beta1
Elementor Website Builder – more than just a page builder v3.34.0-beta1
4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 All 457 releases
← All changes | modules/components/transformers/component-instance-transformer.php +14 -51 4.3.0-beta2 → 3.34.0-beta1 View file →
@@ -1,73 +1,45 @@
1 1 <?php
2 2
3 3 namespace Elementor\Modules\Components\Transformers;
4 4
5 -use Elementor\Modules\AtomicWidgets\Elements\Base\Render_Context;
6 5 use Elementor\Modules\AtomicWidgets\PropsResolver\Props_Resolver_Context;
7 6 use Elementor\Modules\AtomicWidgets\PropsResolver\Transformer_Base;
7 +use Elementor\Modules\Components\Documents\Component;
8 8 use Elementor\Plugin;
9 -use Elementor\Core\Base\Document as Component_Document;
10 -use Elementor\Modules\Components\Components_Repository;
11 -use Elementor\Modules\Components\Utils\Format_Component_Elements_Id;
12 -use Elementor\Modules\Components\Utils\Reconcile_Component_Instance_Elements;
13 -use Elementor\Modules\Components\Widgets\Component_Instance;
14 9
10 +
15 11 if ( ! defined( 'ABSPATH' ) ) {
16 12 exit; // Exit if accessed directly.
17 13 }
18 14
19 15 class Component_Instance_Transformer extends Transformer_Base {
20 - private static array $rendering_stack = [];
21 - private static $repository;
22 -
23 - public static function reset_rendering_stack(): void {
24 - self::$rendering_stack = [];
25 - }
26 -
27 16 public function transform( $value, Props_Resolver_Context $context ) {
28 17 $component_id = $value['component_id'];
29 18
30 - if ( $this->is_circular_reference( $component_id ) ) {
31 - return '';
32 - }
19 + $document = Plugin::$instance->documents->get_doc_for_frontend( $component_id );
33 20
34 - $instance_element_id = Render_Context::get( Component_Instance::class )['instance_id'] ?? '';
35 -
36 - self::$rendering_stack[] = $component_id;
37 - $content = $this->get_rendered_content( $component_id, $instance_element_id );
38 - array_pop( self::$rendering_stack );
39 -
40 - return $content;
41 - }
42 -
43 - private function is_circular_reference( int $component_id ): bool {
44 - return in_array( $component_id, self::$rendering_stack, true );
45 - }
46 -
47 - private function get_rendered_content( int $component_id, ?string $instance_element_id ): string {
48 - $should_show_autosave = is_preview() || Plugin::$instance->editor->is_edit_mode();
49 - $component = $this->get_repository()->get( $component_id, $should_show_autosave );
50 -
51 - if ( ! $component || ! $this->should_render_content( $component ) ) {
21 + if (
22 + ! $document ||
23 + $this->is_password_protected( $document ) ||
24 + ! $this->is_component( $document ) ||
25 + ! $document->is_built_with_elementor()
26 + ) {
52 27 return '';
53 28 }
54 29
55 - Plugin::$instance->documents->switch_to_document( $component );
30 + Plugin::$instance->documents->switch_to_document( $document );
56 31
57 - $data = $component->get_elements_data();
32 + $data = $document->get_elements_data();
58 33
59 34 $data = apply_filters( 'elementor/frontend/builder_content_data', $data, $component_id );
60 35
61 - $data = Reconcile_Component_Instance_Elements::apply( $data );
62 - $data = Format_Component_Elements_Id::format( $data, [ $instance_element_id ] );
63 -
64 36 $content = '';
65 37
66 38 if ( ! empty( $data ) ) {
67 39 ob_start();
68 40
69 - $component->print_elements_without_cache( $data );
41 + $document->print_elements( $data );
70 42
71 43 $content = ob_get_clean();
72 44
73 45 $content = apply_filters( 'elementor/frontend/the_content', $content );
@@ -77,21 +49,12 @@
77 49
78 50 return $content;
79 51 }
80 52
81 - private function should_render_content( Component_Document $document ): bool {
82 - return ! $this->is_password_protected( $document ) &&
83 - $document->is_built_with_elementor();
53 + private function is_component( $document ) {
54 + return $document instanceof Component;
84 55 }
85 56
86 57 private function is_password_protected( $document ) {
87 58 return post_password_required( $document->get_post()->ID );
88 - }
89 -
90 - private function get_repository(): Components_Repository {
91 - if ( ! self::$repository ) {
92 - self::$repository = new Components_Repository();
93 - }
94 -
95 - return self::$repository;
96 59 }
97 60 }