J'ai une page qui contient 4 produits chargés à partir de la base de données, lorsque vous faites défiler vers le bas, vous obtenez 4 produits de plus à chaque fois.Codeigniter éléments en double de la base de données
Ces produits sont chargés de manière aléatoire, le problème sont les produits en double.
Ceci est la ligne que je dans le modèle:
$this->db->order_by('productID', 'RANDOM');
Sans cette ligne, tout fonctionne très bien. Je ne peux pas utiliser limit
mis à 1 parce que j'ai:
$query = $this->db->get('product', 4, $offset);
Il y a une façon simple de résoudre ce problème? Je dois faire un tableau qui contient tous les produits?
MISE À JOUR
Voici le script dans le index.php
<script type="text/javascript">
$(document).ready(function(){
var products = <?= $get_products ?>;
var loaded_products = 0;
$(".loadMoreProducts").click(function(){
loaded_products += 4;
var dati = "welcome/get_products/" + loaded_products;
$.ajax({
url:'welcome/get_products/' + loaded_products,
type: 'get',
data: dati,
cache: false,
success: function() {
$.get(dati, function(data){
$("#mainContainerProductWelcome").append(data);
});
if(loaded_products >= products - 4) {
$(".loadMoreProducts").hide();
} else {
// load more still visible
}
},
error: function() {
// there's something wrong
}
});
// show spinner on ajax request starts
$(".loading-spinner").ajaxStart(function(){
$(".loading-spinner").show();
$(".text-load").hide();
});
// ajax request complets hide spinner
$(".loading-spinner").ajaxStop(function(){
$(".loading-spinner").delay(5000).hide();
$(".text-load").show();
});
return false;
});
// submit form contact
$(window).scroll(function() {
if($(window).scrollTop() + $(window).height() >= $(document).height()) {
loaded_products += 4;
var dati = "welcome/get_products/" + loaded_products;
$.ajax({
url:'welcome/get_products/' + loaded_products,
type: 'get',
data: dati,
cache: false,
success: function() {
$.get(dati, function(data){
$("#mainContainerProductWelcome").append(data);
});
if(loaded_products >= products - 4) {
$(".loadMoreProducts").hide();
} else {
// load more still visible
}
},
error: function() {
// there's something wrong
}
});
// show spinner on ajax request starts
$(".loading-spinner").ajaxStart(function(){
$(".loading-spinner").show();
$(".text-load").hide();
});
// ajax request complets hide spinner
$(".loading-spinner").ajaxStop(function(){
$(".loading-spinner").delay(5000).hide();
$(".text-load").show();
});
return false;
}
});
});
</script>
contrôleur
:
function index()
{
$this->load->helper('url');
$data['description'] = "Description";
$data['keywords'] = "Keywords";
$data['products'] = $this->abitainterni->getAllProductsLimit();
$data['get_products'] = $this->abitainterni->get_products();
//load view
$this->load->view('welcome', $data);
}
function get_products($offset)
{
$data['products'] = $this->abitainterni->getAllProductsLimit($offset);
$this->load->view('get_products', $data);
}
modèle:
function getAllProductsLimit($offset=0)
{
$sql = "SELECT * FROM product P";
$this->db->order_by('productPosition','ASC');
$query = $this->db->get('product', 4, $offset);
if($query->num_rows() > 0){
return $query->result();
} else {
return 0;
}
}
function get_products()
{
$query = $this->db->count_all_results('product');
return $query;
}
Pouvez-vous poster toute requête?Je veux dire, activer le profileur et afficher la requête complète utilisée pour obtenir les produits. –
J'ai mis à jour la question. – simo