Dinamik Arka plan görüntüleri tavsiyem

1 Cevap php

Ben yeni bir arka plan teori yükü, ancak ben bunu yapar fark olacaktır yüklemeden sonra onlar numarasına tıklayarak, bir sayı ile temsil edilen bir menüde yüklenen her bir arka plan görüyorsanız, kullanıcılar orada kendi arka plan resimleri yükleyebilirsiniz bir site oluşturma Ben ajax ile yapabilirsiniz, görünüm yüklemeden görünümüne veri geçirebiliriz bir yolu var, görünümü zaten başka bir işlev yüklenir (de yine görünümünde çağırır? eğer öyleyse nasıl?

Şu anda benim kod

public function set_background() {
        $this->load->model('image_model');
        if($query = $this->image_model->get_background_by_id($this->uri->segments[3])) {
            if($query) {
                $data['new_background'] = $query;
            }
        }
        $this->load->view('template/background-select', $data);
    }

Benim Model:

public function get_background_by_id($background_id) {
    $this->db->select('background_name');
    $this->db->from('background');
    $this->db->where('background_id', $background_id);

    $query = $this->db->get();
    return $query->result_array();
}

Benim Görüntüle

<div id="background-select">


    <?php
        $count = 0;
            if(isset($special)) {
                foreach ($special as $row) {
                    $count ++;
                    print '<div class="select">';
                        print "<a class='background_btn' href='index.php/home/set_background/".$row['background_id']."'>$count</a>";
                    print '</div>';
                    if($count == 1) {
                        $background = $row['background_name'];
                    }

                }
            }
            if(isset($generic)) {
                foreach ($generic as $row) {    
                    $count ++;
                    print '<div class="select">';
                        print "<a class='background_btn' href='index.php/home/set_background/".$row['background_id']."'>$count</a>";
                    print '</div>';
                    if($count == 1) {
                        $background = $row['background_name'];
                    }

                }
            }
            if(isset($user_background)) {
                foreach ($user_background as $row) {
                $count ++;
                    print '<div class="select">';
                        print "<a class='background_btn' href='index.php/home/set_background/".$row['background_id']."'>$count</a>";
                    print '</div>';
                    if($count == 1) {
                        $background = $row['background_name'];
                    }

                }
            }
        ?>
    </div>
    <div id="wrapper" style=<?php echo"background:url(/media/uploads/backgrounds/".$background.");";?>>

Görünümü burada başlangıçta yüklenen alır

public function index() {
    //  $this->output->enable_profiler(TRUE);
        $data = array();
        if($query = $this->category_model->get_all_online()) {
            $data['main_menu'] = $query;
        }
        $this->load->model('image_model');
        /*
        * Sort out the users backgrounds, basically do a check to see if there is a 'special' background
        * if there is not a 'special' background then IF the user is logged in and has a background of there
        * own show that one, if not show a generic one, if they are not logged in show a bang one
        */
        $image = array();
        if ($query = $this->image_model->get_special_backgrounds()) {
            $image['special'] = $query;
        } elseif(!isset($image['special']) && !isset($this->session->userdata['user_id'])) {
            if($query = $this->image_model->get_bang_background()) {
                $image['generic'] = $query;
            }
        } 

        if(isset($this->session->userdata['user_id'])) {
            if($query = $this->image_model->get_user_backgrounds($this->session->userdata['user_id'])) {
                $image['user_background'] = $query;
            }
        }
        $data = array_merge($data, $image);
        $this->load->view('home/main_page.php', array_merge($data, $image));
    }

Bazı sayesinde yardımcı olabilir umuyoruz

1 Cevap

Bu 'kutunun dışında' çok fazla ve yararlı olmak için kod yeterince sadık değil, ama buraya çekebilir:

Kod yapmak gerekiyordu ne açıklaması göz önüne alındığında, her zaman PHP çıkışı olabilir list görünümünde bir JavaScript snippet'inize arka plan görüntüleri (çok kabaca pseudocode: <script><?php echo phpArrayToJavaScriptArray($images, $varName); ?></script> ), daha sonra javascript dinamik sadece (<a href="javascript:changeBackgroundImage('url')">) document.getElementById('wrapper') 'ın arka plan görüntü ayarı JavaScript ile arka plan görüntüsünü değiştirmek için background değişen bağlantıları istemci tarafında listesini ve her tıklama oluşturmak var.

Hiçbir Ajax gerekli.

Akılda bu konsept ile, ben acele concot edebilirsiniz koduna basit ayar şudur:

Bunun yerine görünümüne kimlikleri geçirmeden, (tabii, buna göre sorgulama ayarlamak olurdu) görünümüne URL'leri geçmek ve değiştirin:

"<a
   class='background_btn'
   href='index.php/home/set_background/" . $row['background_id'] . "'>"
   . $count
. "</a>"

gibi bir şey

"<a
   class='background_btn'
   href=\"javascript:changeBackgroundImage('"
   . htmlspecialchars($row['background_url'], ENT_QUOTES, 'utf-8')
   . "')\">"
   . $count
. "</a>"

JavaScript işlevi bu gibi bir şey olacaktır:

<script language="javascript">
function changeBackgroundImage(url) {
    var wrapper = document.getElementById('wrapper');
    wrapper.style = "background-image:url(" + url + ")";
}
</script>

Bunun sürü hala yalancı, aldırmam, ben bu kutudan dışarı kaçıyorum şüphe, benim JS çok paslı, ve bu daha kesin bir düzeltme daha bir fikir paylaşımı olması gerekiyordu. :) Ama ben size sorunu çözmek yardımcı umuyoruz!

Sizin için uygulanabilir bir yaklaşım türüdür?