विजेट फॉर्म फ़ील्ड को गतिशील रूप से जोड़ना


11

मैं गतिशील रूप से वर्डप्रेस विजेट में फ़ॉर्म फ़ील्ड जोड़ने का प्रयास कर रहा हूं। इसलिए यदि उपयोगकर्ता किसी ईवेंट में दूसरी तिथि जोड़ना चाहते हैं तो वे अधिक फ़ील्ड प्राप्त करने के लिए एक बटन क्लिक कर सकते हैं।

सवाल यह है: मेरे डेटाबेस में नए बनाए गए इनपुट फ़ील्ड को कैसे बचाएं? क्या मुझे एक कस्टम अपडेट फ़ंक्शन लिखने की आवश्यकता है? कोई सुझाव?

इस तरह से विजेट दिखता है: यहाँ छवि विवरण दर्ज करें

यह विजेट के लिए मेरा php कोड है (अब तक):

    class Spillelister extends WP_Widget {

    public function Spillelister() {

        $widget_options = array (
            'classname' => 'spillelister-widget',
            'description' => 'Widget for å illustrere spillelister.');

        parent::WP_Widget('spillelister_widget', 'Spilleplan', $widget_options);
    }

    // The actual widget user interface
    public function widget($args, $instance) {

        extract( $args, EXTR_SKIP);
        $title = ( $instance['title'] ) ? $instance['title'] : 'Spilleplan';
        $body = ( $instance['body'] ) ? $instance['body'] : 'Ingen flere forestillinger';

        ?>

            <?php echo $before_widget; ?>
            <?php echo $before_title . $title . $after_title; ?>
            <p><?php echo $body; ?></p>

        <?php
    }

    public function update() {

    }

    public function form() {
    ?>
        <div class="date_stamp">
        <p>
            <label>Dato</label> <input type="text" class="datepicker">
            <br>
            <label>Tid</label> <input type="text">
            <span class="remove">Remove</span>
        </p>
        </div>
        <p>
            <span class="add">Add fields</span>
        </p>

    <?php 
    }


}

function spillelister_init() {
    register_widget('Spillelister');    
}
add_action('widgets_init', 'Spillelister_init');

किसी भी सुझाव, संकेत या उत्तर की सराहना की जाती है। :)


1
मुझे पता है कि मुझे देर हो गई है, लेकिन मैं इस धागे में टकरा गया और दूसरे में एक जवाब मिला: wordpress.stackexchange.com/questions/94617/… यह ट्रिक मानों को एक सरणी के रूप में वापस पारित करता है।
अलेक्जेंडरफिलाटोव

जवाबों:


5

दिलचस्प सवाल!
मैंने कभी भी विजेट्स में उपयोग किए जाने वाले दोहराए जाने योग्य फ़ील्ड नहीं देखे हैं। एक पूर्ण उत्तर देने के लिए बहुत अधिक काम / समय की आवश्यकता होगी, इसलिए मैं आपको उन संसाधनों के लिंक दूंगा जिन्हें मैं जानता हूं, और उम्मीद है कि आप यह काम करेंगे और हमारे साथ समाधान साझा करेंगे;)

यह सभी उदाहरण मेटा बॉक्स के साथ काम करते हैं, आपको jQuery स्क्रिप्ट की प्रतिलिपि बनाने और post_metaविजेट मामले को अनुकूलित करने की आवश्यकता होगी ।


धन्यवाद! मैं इसे देखूंगा और जवाब दूंगा कि क्या मैं इसे हल करने के लिए काम करता हूं। अगर आपको या किसी और को इस पर कोई और संसाधन
मिलें

1
कभी भी इसे आज़माने के लिए नहीं मिला, हालांकि अगर कोई भी इस तरह का निर्माण करने का प्रबंधन करता है तो कृपया अपना समाधान पोस्ट करें। :)
ओले हेनरिक स्कोगस्ट्रॉम

2

यह एक गतिशील विजेट का एक उदाहरण है जो दो क्षेत्रों (छवि-आईडी और यूआरएल) का प्रतिपादन करता है। यदि आप एक छवि-आईडी दर्ज करते हैं और "अपडेट" दबाते हैं, तो दो नए फ़ील्ड जोड़े जाते हैं। मैं इसे चित्रों और लिंक किए गए url के साथ एक स्लीक स्लैब बनाने के लिए बनाता हूं।

<?php

class imp_image_slider extends WP_Widget
{
/**
 * imp_image_slider constructor.
 */
public function __construct()
{
    parent::__construct(false, $name = "Impulse Image Slider", array("description" => "Creates Slick Image Slider"));
}

/**
 * @see WP_Widget::widget
 *
 * @param array $args
 * @param array $instance
 */
public function widget($args, $instance)
{
// render widget in frontend
}


/**
 * @see WP_Widget::update
 *
 * @param array $newInstance
 * @param array $oldInstance
 *
 * @return array
 */
public function update($newInstance, $oldInstance)
{
    $instance = $oldInstance;
    $instance['images'] = array();
    $instance['urls'] = array();
    if (isset($newInstance['images'])) {
        foreach ($newInstance['images'] as $key => $value) {
            if (!empty(trim($value))) {
                $instance['images'][$key] = $value;
                $instance['urls'][$key] = $newInstance['urls'][$key];
            }
        }
    }

    return $instance;
}

/**
 * @see WP_Widget::form
 *
 * @param array $instance
 */
public function form($instance)
{
    $images = isset($instance['images']) ? $instance['images'] : array();
    $urls = isset($instance['urls']) ? $instance['urls'] : array();
    $images[] = '';
    $form = '';

    foreach ($images as $idx => $value) {
        $image = isset($images[$idx]) ? $images[$idx] : '';
        $url = isset($urls[$idx]) ? $urls[$idx] : '';
        $form .= '<p>'
            . '<label>Slides:</label>'
            . sprintf(
                '<input type="text" name="%1$s[%2$s]" value="%3$s" class="widefat" placeholder="Image ID">',
                $this->get_field_name('images'),
                $idx,
                esc_attr($image))
            . '</p>'
            . '<p>'
            . sprintf(
                '<input type="text" name="%1$s[%2$s]" value="%3$s" class="widefat" placeholder="Url">',
                $this->get_field_name('urls'),
                $idx,
                esc_attr($url))
            . '</p>';
    }

    echo $form;
}
}

add_action('widgets_init', create_function('', 'return register_widget("imp_image_slider");'));

?>

नमस्ते, क्या आप टिप्पणी या कुछ जानकारी भी जोड़ सकते हैं कि यह कैसे ओपी को कोड के अलावा पोस्ट में मदद करता है क्योंकि कोड केवल उत्तर हतोत्साहित करते हैं
bravokeyl

1
हाय, मैंने अभी किया। आशा है ये मदद करेगा।
एचकेंडुल्ला

@ हंदुल्ला आपका बहुत बहुत धन्यवाद। आप और आपका कोड मेरे जीवन रक्षक है एक बार फिर धन्यवाद।
ओवैस यूसुफ़ी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.