晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/rainic/www/oldTZh/wp-content/plugins/elementor-pro/modules/woocommerce/documents/ |
Upload File : |
<?php
namespace ElementorPro\Modules\Woocommerce\Documents;
use Elementor\Controls_Manager;
use ElementorPro\Modules\ThemeBuilder\Documents\Single_Base;
use ElementorPro\Modules\ThemeBuilder\Documents\Theme_Document;
use ElementorPro\Plugin;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Product extends Single_Base {
const EXPORT_GROUP = 'product';
public static function get_properties() {
$properties = parent::get_properties();
$properties['location'] = 'single';
$properties['condition_type'] = 'product';
$properties['export_group'] = Theme_Document::EXPORT_GROUP;
return $properties;
}
public static function get_type() {
return 'product';
}
public static function get_title() {
return esc_html__( 'Single Product', 'elementor-pro' );
}
public static function get_plural_title() {
return esc_html__( 'Single Products', 'elementor-pro' );
}
protected static function get_site_editor_icon() {
return 'eicon-single-product';
}
protected static function get_site_editor_tooltip_data() {
return [
'title' => esc_html__( 'What is a Single Product Template?', 'elementor-pro' ),
'content' => esc_html__( 'A single product template allows you to easily design the layout and style of WooCommerce single product pages, and apply that template to various conditions that you assign.', 'elementor-pro' ),
'tip' => esc_html__( 'You can create multiple single product templates, and assign each to different types of products, enabling a custom design for each group of similar products.', 'elementor-pro' ),
'docs' => 'https://go.elementor.com/app-theme-builder-product',
'video_url' => 'https://www.youtube.com/embed/PjhoB1RWkBM',
];
}
public static function get_editor_panel_config() {
$config = parent::get_editor_panel_config();
$config['widgets_settings']['woocommerce-product-content'] = [
'show_in_panel' => true,
];
return $config;
}
public function enqueue_scripts() {
// In preview mode it's not a real Product page - enqueue manually.
if ( Plugin::elementor()->preview->is_preview_mode( $this->get_main_id() ) ) {
global $product;
if ( is_singular( 'product' ) ) {
$product = wc_get_product();
}
if ( current_theme_supports( 'wc-product-gallery-zoom' ) ) {
wp_enqueue_script( 'zoom' );
}
if ( current_theme_supports( 'wc-product-gallery-slider' ) ) {
wp_enqueue_script( 'flexslider' );
}
if ( current_theme_supports( 'wc-product-gallery-lightbox' ) ) {
wp_enqueue_script( 'photoswipe-ui-default' );
wp_enqueue_style( 'photoswipe-default-skin' );
add_action( 'wp_footer', 'woocommerce_photoswipe' );
}
wp_enqueue_script( 'wc-single-product' );
wp_enqueue_style( 'photoswipe' );
wp_enqueue_style( 'photoswipe-default-skin' );
wp_enqueue_style( 'photoswipe-default-skin' );
wp_enqueue_style( 'woocommerce_prettyPhoto_css' );
}
}
public function get_depended_widget() {
return Plugin::elementor()->widgets_manager->get_widget_types( 'woocommerce-product-data-tabs' );
}
public function get_container_attributes() {
$attributes = parent::get_container_attributes();
$attributes['class'] .= ' product';
return $attributes;
}
public function filter_body_classes( $body_classes ) {
$body_classes = parent::filter_body_classes( $body_classes );
if ( get_the_ID() === $this->get_main_id() || Plugin::elementor()->preview->is_preview_mode( $this->get_main_id() ) ) {
$body_classes[] = 'woocommerce';
}
return $body_classes;
}
public function before_get_content() {
parent::before_get_content();
global $product;
if ( ! is_object( $product ) ) {
$product = wc_get_product( get_the_ID() );
}
do_action( 'woocommerce_before_single_product' );
}
public function after_get_content() {
parent::after_get_content();
do_action( 'woocommerce_after_single_product' );
}
public function print_content() {
if ( post_password_required() ) {
// PHPCS - It's a safe WP template function
echo get_the_password_form(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
return;
}
parent::print_content();
}
public function __construct( array $data = [] ) {
parent::__construct( $data );
add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_scripts' ], 11 );
}
protected static function get_editor_panel_categories() {
$categories = [
'woocommerce-elements-single' => [
'title' => esc_html__( 'Product', 'elementor-pro' ),
],
// Move to top as active.
'woocommerce-elements' => [
'title' => esc_html__( 'WooCommerce', 'elementor-pro' ),
'active' => true,
],
];
$categories += parent::get_editor_panel_categories();
unset( $categories['theme-elements-single'] );
return $categories;
}
protected function register_controls() {
parent::register_controls();
$this->update_control(
'preview_type',
[
'type' => Controls_Manager::HIDDEN,
'default' => 'single/product',
]
);
$latest_posts = get_posts( [
'posts_per_page' => 1,
'post_type' => 'product',
] );
if ( ! empty( $latest_posts ) ) {
$this->update_control(
'preview_id',
[
'default' => $latest_posts[0]->ID,
]
);
}
}
protected function get_remote_library_config() {
$config = parent::get_remote_library_config();
$config['category'] = 'single product';
return $config;
}
}