Ir para conteúdo
violin101

JavaScript - owlCarousel - Mostrar itens relacionados

Recommended Posts

Caros amigos, saudações...

 

Tenho uma rotina para mostrar ao usuário todos os produtos Relacionados com um determinado Produto.

 

Exemplo:

Caderno ---> relacionado com: lápis, borracha, caneta, apontador e etc.

 

O problema que estou enfrentando é o seguinte:

==> o produto caderno se estiver relacionado com mais de 4 produtos não ocorre o erro.

 

Quando mostro o relacionamento se o produto estiver relacionado com apenas 3 ou menos produto, o CAROUSEL fica repetindo o 1º ou 2º item.

 

Como faço para isso não acontecer ?

 

Abaixo posto como está o JavaScript.

$(".produto_relaciona").owlCarousel({
  loop: true,
  nav: true,
  items: 4,
  dots: false,
  navText: ["<i class='fa fa-angle-left'></i>", "<i class='fa fa-angle-right'></i>"],
  smartSpeed: 1200,
  autoplayTimeout: 5000,        
  autoHeight: false,
  autoplay: true,
  responsive: {
    0: {
      items: 1
    },
    480: {
      items: 2
    },
    768: {
      items: 3
    },
    992: {
      items: 4
    }
  }
});

 

 

Grato,

 

Cesar

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 ponto: Você deveria ter colocado tb o html

2 ponto: no seu script você define claramente 4 items, então acredito que o que esteja ocorrendo e apenas exibir as imagesn novamente devido o loop.

 

Obs: não ficou muito clara sua dúvida, você quer exibir 4 imagens diferentes tendo menos de 4?

 

JsBin: https://jsbin.com/jerahopipe/edit?html,js,output

 

 

$(".owl-carousel").owlCarousel({
  loop: true,
  nav: true,
  items: 4, // Define o numero de items
  dots: false,
  navText: ["<i class='fa fa-angle-left'></i>", "<i class='fa fa-angle-right'></i>"],
  smartSpeed: 1200,
  autoplayTimeout: 5000,        
  autoHeight: false,
  autoplay: true,
  responsive: {
    // acredito que defina o espaçamento entre os itens, logo se houver apenas 2 imagesn e no attributo items for igual 2(items:2) a biblioteca ira considerar essa definiçao agora se essa definiçao não existir passa a vvalor o valor de (items) seguindo a configuracao da biblioteca para exibir a cada loop o numero igual aos itens definidos
    0: {
      items: 1
    },
    480: {
      items: 2
    },
    768: {
      items: 3
    },
    992: {
      items: 4
    }
  }
});

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo, Wanderval

 

saudações...

 

Vou tentar te explicar melhor.

 

O produto CADERNO:  tem 4 produtos relacionados a ele.

O produto CANETA...:  tem 3 produtos relacionados a ele.

 

A quantidade de relacionamento para CADA produto, depende da quantidade de relacionamento cadastro pelo o usuário.

 

Observação:

1 - a quantidade de itens relacionado pode variar.

2 - não foi defini o ESPAÇAMENTO entre os itens, pois é nessa parte que estou errando.

 

A rotina que escrevi para mostrar está assim:

<?php if (!$relaks) { ?>
<!--Não Mostra nada-->
<?php } else  { ?>    	
<section class="product-area li-laptop-product pt-10 pb-50">
  <div class="container">
    <div class="row">
      <!-- Begin Li's Section Area -->
      <div class="col-lg-12">
        <div class="li-section-title">
          <h2>
            <span>Produto(s) Relacionado(s)</span>
          </h2>
        </div>
        <div class="row">
          <div class="product-relat owl-carousel">
            <?php foreach ($relaks as $pr) { ?>
            <div class="col-lg-12">
              <div class="single-product-wrap">
                <div class="product-image">
                  <?php if ($pr->imagemCapa != null) { ?>
                  <img src="<?php echo $pr->imagemCapa; ?>" alt="">
                  <?php } else { ?>
                  <img src="<?php echo base_url() ?>assets/img/semImg.jpg"
                       alt="">
                  <?php } ?>
                  <div class="product-label">
                    <?php if($pr->desc_promocao != "" && $pr->desc_promocao != 0){ ?>
                    <span class="dscprd">-<?php echo $pr->desc_promocao; ?>%</span>
                    <?php } 
					if($pr->novo != "2"){ ?>
                    <span class="newprd">NOVO</span> 
                    <?php } ?>
                  </div>
                </div>

                <div class="product_desc">
                  <div class="product_desc_info">
                    <div class="product-review">
                      <h5 class="manufacturer">
                        <p><?php echo $pr->mrc_descr; ?></p>
                      </h5>
                      <div class="rating-box">
                        <?php 
                          $codProd = $pr->idProdutos;
                          $codClie = $pr->id_clientes;
                          $average = 0;
                          $pontoNumber = 0; 
                          $count = 0;                 
                          //Executa SQL no Mysql
                          $sqls = $this->db->query("SELECT avaliacao.*, produtos.*, clientes.*
                          FROM avaliacao 
                          INNER JOIN produtos ON produtos.idProdutos = avaliacao.avl_idProdutos
                          INNER JOIN clientes ON clientes.idClientes = avaliacao.avl_idClientes
                          WHERE avl_idClientes = $codClie
                          AND avl_idProdutos = $codProd ");

                          foreach($sqls->result() as $al) {
                          $pontoNumber += $al->avl_ponto;
                          $count += 1;                         
                          } 

                          if($pontoNumber && $count) {
                          $average = $pontoNumber/$count;
                          }                                                 
                          $averageRating = round($average, 0);

                          if($averageRating == 0){ ?>
                        <div style="color:#FFFFFF;">-</div>
                        <?php } else {
                          for ($i = 1; $i <= 5; $i++) {

                          if($i <= $averageRating) {
                          $ratingClass = "<i class='fa fa-star'></i>";
                          } else {
                          $ratingClass = "<i class='fa fa-star-o empty'></i>";
                          }//Fim do IF ?>

                        <i class="fa fa-star <?php echo $ratingClass; ?>"></i>

                        <?php }//Fim do FOR
                          }//Fim do IF
                        ?>
                      </div>
                    </div>
                    <h4>
                      <p class="produto_name">
                        <?php echo $pr->descricao; ?>
                      </p>
                    </h4>
                    <div class="price-box">
                      <?php 
                        if($pr->valor_venda != 0) {
                        $vlrvda = $pr->valor_venda;
                        } else {
                        $vlrvda = $pr->valor_ultcpra;
                        }

                        if($pr->desc_promocao != "" && $pr->desc_promocao != 0){
                        //Converte
                        $valor = floatval(str_replace(",",".",$vlrvda));
                        $desc  = floatval(str_replace(",",".",$pr->desc_promocao));
                        //Calcular
                        $calc = ($valor * $desc)/100;
                        $result = $valor - $calc; ?>
                      <span class="new-price new-price-2">
                        R$ <?php echo number_format($result, 2, ",", ".");?>
                      </span>
                      <span class="old-price">
                        R$ <?php echo number_format($vlrvda, 2, ",", "."); ?>
                      </span>
                      <?php } else { ?>
                      <span class="new-price new-price-2">
                        R$ <?php echo number_format($vlrvda, 2, ",", "."); ?>
                      </span>                                                  
                      <?php } ?>                                                 
                    </div>
                  </div>
                  <div class="product_categ pt-5">
                    <label class="prdCateg">Categoria</label>
                    <label class="lblCateg"><?php echo $pr->categoria; ?></label>
                  </div>                                            
                  <div class="add-actions">
                    <form method="post" action="<?php echo base_url();?>site/produtos/dadosProdutos/<?php echo $pr->idProdutos; ?>">                
                      <button class="add-to-cart-btn">
                        <i class="fa fa-search"></i>Visualizar
                      </button>
                    </form>
                  </div>
                </div>
              </div>
            </div>
            <?php }//Fim do Foreach ?>	                                
          </div>
        </div>                        
      </div>
      <!-- Li's Section Area End Here -->
    </div>
  </div>
</section>  
<?php } ?>

 

Grato,

 

Cesar

Compartilhar este post


Link para o post
Compartilhar em outros sites

@violin101

Entendi seu problema e é fácil de resolver.

Porém desde já: Desconheço completamente o comportamento de owlCarousel

 

A questão é simples o PHP gera o HTML que por sua vez pode conter uma quantidade de elementos sendo 1,2,3,4,5.... porém no javascript você interpreta apenas 4 desses.

Basta apenas indicar ao script quantas voltas de loop existem.

E você já tem solução aí em seu código:

Agora, violin101 disse:

$count += 1;

 

Assim sendo acredito que isso já possa solucionar. Ou seja indicando ao script o que o html possui de elementos.

7 horas atrás, violin101 disse:

nav: true,

items: <?= $count ?>,

dots: false,

 

Entretanto me intriga esse objeto, justamente porque não sei como funciona o owlCarousel:

7 horas atrás, violin101 disse:

responsive: {

Se for o que penso... que seja somente algo de renderização de escala não será necessário intervir, porém se tiver algo a mais.

Você pode está usando o PHP para escrever essa parte do javascript de acordo com o loop.

 

 

Citar

NOTA*

Para que códigos php sejam escrito no javascript, é necessário que o script esteja no mesmo documento onde o código php está sendo gerado.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros amigos, saudações...

 

Consegui resolver o problema que estava enfrentando.

 

Ficou assim:

$(".produto_relaciona").owlCarousel({
  loop: true,
  nav: true,
  items: 4, //aqui mantive para o sistema saber e configurar quantos ITENS desejo mostrar no site
  dots: false,
  navText: ["<i class='fa fa-angle-left'></i>", "<i class='fa fa-angle-right'></i>"],
  smartSpeed: 1200,
  autoplayTimeout: 5000,        
  autoHeight: false,
  autoplay: true
  
  /*---[ eliminei essas linhas abaixo e mantive acima conforme esta
  responsive: {
    0: {
      items: 1
    },
    480: {
      items: 2
    },
    768: {
      items: 3
    },
    992: {
      items: 4
    }
  }
  */
  
});

 

Grato,

 

Cesar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por ILR master
      Pessoal, pergunta bem simples. Abaixo tenho o seguinte código:
       
      <script>
      function alerta()
      {
        if (window.confirm("Você realmente quer sair?")) {
          window.open("sair.html");
      }
      }
      </script>
       
      Funciona perfeitamente, só que está abrindo em outra janela e quero que abra na mesma janela.
       
      Alguém pode me ajudar?
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por Thiago Duarte
      Oi, gostaria de arrastar imagem e ao soltar formar bloco html, meu bloco de html ficaria com nome, content-1.html, content-2.html, etc
       
      Alguem pode me ajudar?
    • Por belann
      Olá!
       
      Estou fazendo o upload de arquivos com fetch dessa forma
      fetch(url, {
              method: 'POST',
              headers: {'Content-Type': 'multipart/form-data',},
              body: formData 
          }).catch((error) => (console.log("Problemas com o Upload"), error));
       
      estou usando input type=file
      e criando uma const formData = new FormData(); 
      mas não faz e não dá nenhum erro.
      estou fazendo o upload com a url="http://localhost/dashboard/dados".
    • Por joeythai
      Boa tarde pessoal,
       
      Eu criei um formulário em que tenho 3 interações: evento click, change e uma chamada ajax. No evento on change ("select#removal_table_from" )eu faço uma chamada ajax onde eu passo como parametro o id do item selecionado e construo uma tabela dinamica com o próprio javascript, após isto, tenho um input em que o usuario coloca um valor de percentual para que eu possa preencher em 3 colunas da tabela que foi criada dinamicamente: moto_atualizado, carro_atualizado e caminhao_atualizado, até aí tudo bem, o codigo está fazendo isso, porém, como a tabela é criada dinamicamente eu preciso de alguma forma enviar o arrayData para meu backend mas quando faço o calculo dentro do loop apos resposta do meu ajax, os valores desses 3 campos chegam como null, não sei se é possível fazer o que pretendo ou se é ainda não sei como faz
       
      <code>
           $(document).ready(function (event) {   let arrayData = []; let percentage; let removal_vehicle; let removal_motorcycle; let removal_tuck; let apply_removal = $('#apply_removal');   // apply_removal.on('click', function () { // percentage = $('#percentage').val();   // $('.table-body tr').each(function () {   // let veiculo = $(this).find('.veiculo').text(); // let moto = $(this).find('.moto').text(); // let caminhao = $(this).find('.caminhao').text();   // let removal_vehicle = parseFloat(veiculo) + (parseFloat(veiculo) * parseFloat(percentage)) / 100; // let removal_motorcycle = parseFloat(moto) + (parseFloat(moto) * parseFloat(percentage)) / 100; // let removal_tuck = parseFloat(caminhao) + (parseFloat(caminhao) * parseFloat(percentage)) / 100;   // arrayData.push({ // removal_vehicle, // removal_motorcycle, // removal_tuck // })   // $(this).find('.veiculo_atualizado').val(removal_vehicle.toFixed(2)); // $(this).find('.moto_atualizado').val(removal_motorcycle.toFixed(2)); // $(this).find('.caminhao_atualizado').val(removal_tuck.toFixed(2)); // }); // });   apply_removal.on('click', function () { percentage = $('#percentage').val();   $('.table-body tr').each(function () {   let veiculo = $(this).find('.veiculo').text(); let moto = $(this).find('.moto').text(); let caminhao = $(this).find('.caminhao').text();   removal_vehicle = parseFloat(veiculo) + (parseFloat(veiculo) * parseFloat(percentage)) / 100; removal_motorcycle = parseFloat(moto) + (parseFloat(moto) * parseFloat(percentage)) / 100; removal_tuck = parseFloat(caminhao) + (parseFloat(caminhao) * parseFloat(percentage)) / 100;   arrayData.push({ removal_vehicle, removal_motorcycle, removal_tuck })   $(this).find('.veiculo_atualizado').val(removal_vehicle.toFixed(2)); $(this).find('.moto_atualizado').val(removal_motorcycle.toFixed(2)); $(this).find('.caminhao_atualizado').val(removal_tuck.toFixed(2));     console.log('Removal Vehicle:', removal_vehicle); console.log('Removal Motorcycle:', removal_motorcycle); console.log('Removal Truck:', removal_tuck); }); });   $('select#removal_table_from').on('change', function (e) { let table_id = $(this).val(); let action = route('removal.removal-values.show', table_id);   $.ajax({ type: "GET", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },   success: function (data) { $('.table-body').empty();   for (let i = 0; i < data.length; i++) { let carro = parseFloat(data[i].CARRO); let moto = parseFloat(data[i].MOTO); let caminhao = parseFloat(data[i].CAMINHAO); let distancia = data[i].DISTANCIA; let origem = data[i].ORIGEM; let destino = data[i].DESTINO; let localidadeOrigem = data[i].LocalidadeOrigem_ID; let localidadeDestino = data[i].LocalidadeDestino_ID;   let newRow = '<tr class="removal-row">' + '<td class="align-middle">' + '<div class="row">' + '<div class="col-1">' + '<span class="font-weight-bold">Origem</span><br>' + '<span class="origem">' + origem + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Destino</span><br>' + '<span class="destino">' + destino + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">KM</span><br>' + '<span class="km">' + distancia + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Veículo</span><br>' + '<span class="veiculo">' + carro + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Veículo Atualizado</span><br>' + '<input type="text" class="veiculo_atualizado">' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Moto</span><br>' + '<span class="moto">' + moto + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Moto Atualizado</span><br>' + '<input type="text" class="moto_atualizado">' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Caminhão</span><br>' + '<span class="caminhao">' + caminhao + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Caminhão Atualizado</span><br>' + '<input type="text" class="caminhao_atualizado">' + '</div>' + '</div>' + '</div>' + '</td>' + '</tr>';   $('.table-body').append(newRow); //let row = $('.removal-row:last');   // Calcula o valor atualizado e define nos campos diretamente // let veiculo_atualizado = carro + (carro * percentage) / 100; // let moto_atualizado = moto + (moto * percentage) / 100; // let caminhao_atualizado = caminhao + (caminhao * percentage) / 100; // console.log('PORCENTS: ', percentage); //console.log('Veiculo Atualizado:', veiculo_atualizado, 'Moto Atualizado:', moto_atualizado, 'Caminhao Atualizado:', caminhao_atualizado);   // Define os valores diretamente nos campos da nova linha // row.find('.veiculo_atualizado').val(veiculo_atualizado.toFixed(2)); // row.find('.moto_atualizado').val(moto_atualizado.toFixed(2)); // row.find('.caminhao_atualizado').val(caminhao_atualizado.toFixed(2));   arrayData.push({ carro, moto, caminhao, distancia, origem, destino, localidadeOrigem, localidadeDestino, removal_vehicle, removal_motorcycle, removal_tuck }); }   $('#copy_data_table').val(JSON.stringify(arrayData)); }   }); });   //javascript para o formulario de cadastro // $(document).ready(function (event) { $('#uf').change(function () { let code_city = $(this).val(); let deposit = localStorage.getItem('selected_deposit_id'); let action = route('removal.removal-values.cities', code_city); $.ajax({ type: "POST", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { code_city: code_city },   success: function (data) {   $('#city').empty(); $('#deposit').empty();   for (let i = 0; i < data.cities.length; i++) { $('#city').append('<option value="' + data.cities[i].NM + '">' + data.cities[i].NM + '<option>'); }   if (data.deposits.length > 0) { for (let i = 0; i < data.deposits.length; i++) { $('#deposit').append('<option value="' + data.deposits[i].NM + '">' + data.deposits[i].NM + '<option>'); } } else { // $('#deposit').prop('disabled', true); // $('#city').prop('disabled', false); }   $('#city').trigger('change'); } });   });   $('#deposit').on('change', function () { depositId = $(this).val(); localStorage.setItem('selected_deposit_id', depositId); });   $('#uf_destiny').change(function () { let code_city = $(this).val(); let depositDestiny = localStorage.getItem('selected_deposit_destiny_id'); let action = route('removal.removal-values.cities', code_city); $.ajax({ type: "POST", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { code_city: code_city },   success: function (data) {   $('#city_destiny').empty(); $('#deposit_destiny').empty();   for (let i = 0; i < data.cities.length; i++) { $('#city_destiny').append('<option value="' + data.cities[i].NM + '">' + data.cities[i].NM + '</option>'); }   if (data.deposits.length > 0) { // $('#deposit_destiny').prop('disabled', false); //$('#city_destiny').empty(); // $('#city_destiny').prop('disabled', true); for (let i = 0; i < data.deposits.length; i++) { $('#deposit_destiny').append('<option value="' + data.deposits[i].NM + '">' + data.deposits[i].NM + '</option>'); } } else { // $('#deposit_destiny').prop('disabled', true); // $('#city_destiny').prop('disabled', false); }   $('#city_destiny').trigger('change'); } }); });   $('#deposit_destiny').on('change', function () { let depositDestinyId = $(this).val(); localStorage.setItem('selected_deposit_destiny_id', depositDestinyId); });   }); </code>
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.