Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: JirkaDeLucina 21. 10. 2020, 22:05:24

Název: Mizející DIV
Přispěvatel: JirkaDeLucina 21. 10. 2020, 22:05:24
nějak si nevím rady, proč zmizí DIV u rotátoru náhledů produktů (carouselu) ve spodní části stránky, když použiji filtraci (po levé části stránky). Používám PS 1.7 a na rotátor je použit Owl carousel.

Je možno otestovat zde:
https://test.darujpoukaz.cz/cviceni (https://test.darujpoukaz.cz/cviceni)



We use on our website Owl Carousel and product module filter. It is used on PrestaShop 1.7.4.

Owl carousel works without any problem, until is used product filter.

On our site: https://test.darujpoukaz.cz/cviceni you can see a Carousel bottom of the page.

V Google konzoli se správně u Owl carousel zobrazuje tento kód:

<div class="carousel_content owl-carousel owl-theme owl-loaded owl-drag">
   <div class="owl-stage-outer">
      <div class="owl-stage" style="XY">
         <div class="owl-item cloned" style="width: 440px; margin-right: 10px;">
            <article class="dpcz-product product-miniature js-product-miniature".....>


Pokud se ale použije filtrace, kód se změní na:

<div class="carousel_content ">                                                           
    <article class="dpcz-product product-miniature js-product-miniature".....>


Většina DIV zmizí a carousel přestane fungovat.

Můžete mi prosím někdo poradit, kde hledat chybu? Děkuji moc.
Název: Re:Mizející DIV
Přispěvatel: hechj 21. 10. 2020, 23:41:15
Vždycky, když jsem měl tyto problémy, tak se vždy lišila šablona úvodní stránky od šablony v ajaxu. Zkuste
Název: Re:Mizející DIV
Přispěvatel: JirkaDeLucina 22. 10. 2020, 11:50:29
Vždycky, když jsem měl tyto problémy, tak se vždy lišila šablona úvodní stránky od šablony v ajaxu. Zkuste


Mohu se prosím zeptat, jak docílím toho, aby se znova Carousel nastartoval?

Soubor modulu v kořenovém adresáři modulu "yetanotheradvancedsearch.php" volá tento soubor, který to celé způsobí:
http://test.darujpoukaz.cz/modules/yetanotheradvancedsearch/views/js/yetanotheradvancedsearch.js

Děkuji moc za jakoukoliv pomoc.
Název: Re:Mizející DIV
Přispěvatel: hechj 22. 10. 2020, 12:49:10
V javascriptu to není. To bude jednoduchá chyba s jednoduchým řešením. Zjistěte, co se posílá z php ajaxem do stránky. Je rozhozená struktura, takže carusel nemá tu podobu, kterou má mít, aby se to točilo. Stránka s vyhledanými výsledky nemá tu správnou podobu. Nebo se carusel vkládá do blbého divu a část struktury prostě přepíše. Zkontrolujte šablonu. Víc vám neporadím. Vůbec nijak jsem to nezkoumal, protože nemám tolik času a stejně bych to jen z výřezu nepochopil. Píšu podle svých zkušeností z minulých projektů. Vždycky to byla chyba šablony, protože jsem měl 2, místo abych použil jeden snippet. Nabízím konzultaci za 1000 Kč/hod.
Název: Re:Mizející DIV
Přispěvatel: JirkaDeLucina 23. 10. 2020, 09:51:26
Děkuji za radu, tuším, že to bude něco velice jednoduchého. Jen jsem celý včerejší den u toho proseděl a zkoumal soubory, kde bych měl co upravit či přidat. Rád bych Vás tedy ještě poprosil, jestli mohu, ve Vašem případě jste upravoval asi nějaký soubor  .php (nikoliv .tpl?). Potřeboval bych spíše jen nasměrovat, zda se mám dívat na soubory .php od modulu product filter, který to způsobuje nebo do souborů šablony webu či do souborů carousel modulu? A případně do daného souboru jste vkládal nějaký kód, který includoval něco, aby se znova inicioval carousel modul - nebo něco, aby se v carousel rozběhlo to točení?
Vážím si Vaší nabídky konzultace, rád na věci přicházím ale sám (samozřejmě s nějakým tím nakopnutím), o to větší je pak radost, když se nalezne řešení :) Děkuji moc za pomoc.
Název: Re:Mizející DIV
Přispěvatel: JirkaDeLucina 23. 10. 2020, 11:45:40
V hlavním souboru carousel modulu jsem dohledal:

public function hookDisplayHeader()
{
$this->context->controller->addJS($this->_path.'views/js/cp.owl.carousel.js');
}

Zkusil jsem tedy do hlavního php souboru od modulu product filter přidat toto, ale bohužel se to nerozjelo:

public function hookDisplayHeader()
{
$this->context->controller->addJS($this->_path.'../hicarouselspack/views/js/cp.owl.carousel.js', 'all');
}

Daný soubor .js ovládá to rolování, to jsem si již ověřil a cestu z jednoho adresáře modulu do jiného doufám, že mám správně. Ovšem carousel se nespustil :(
Název: Re:Mizející DIV
Přispěvatel: JirkaDeLucina 23. 10. 2020, 12:24:10
Zde je js, který ten carousel ovládá. Zatím netuším, jakou funkci a atributy pro spuštění mám hledat:
http://test.darujpoukaz.cz/modules/h...wl.carousel.js

Rád bych se zeptal, pokud tu funkci a atributy nějak naleznu, kam bych je měl překopírovat - do jiného .js souboru od modulu product filtru?
Název: Re:Mizející DIV
Přispěvatel: JirkaDeLucina 23. 10. 2020, 13:26:34
V tomto .js jsem našel funci, která spouští carousel:

http://test.darujpoukaz.cz/modules/hicarouselspack/views/js/cp.owl.carousel.js (http://test.darujpoukaz.cz/modules/hicarouselspack/views/js/cp.owl.carousel.js)

Kód: [Vybrat]
function Owl(element, options)
Když ji ale takto přidám do hlavního .js souboru od product filter modulu, tak se carousel sice spustí, ale naopak přestane fungovat ta filtrace produktů. Netušíte, čím to může být?

Soubor .js, kam jsem to zkoušel přidat a rozběhlo se to, ale přestal fungovat filtr:

http://test.darujpoukaz.cz/modules/yetanotheradvancedsearch/views/js/yetanotheradvancedsearch.js (http://test.darujpoukaz.cz/modules/yetanotheradvancedsearch/views/js/yetanotheradvancedsearch.js)
Název: Re:Mizející DIV
Přispěvatel: hechj 25. 10. 2020, 08:26:48
Lze ty 2 moduly použít dohromady? Podpora prestashopu nefunguje? Vyhledávání rozhodí carusel, přepíše mu strukturu. Je potřeba najít šablonu vyhledávání a podívat se, co se vrací ajaxem. Nebo vyhodit carusel do jiné části stránky. Javascript za to nemůže. Vyhledávání ty divy neobsahuje, protože šablona o nějakém owlu vůbec nic neví. Doporučuji použít placený e-shop. Instalace vám peníze nevydělá.
Název: Re:Mizející DIV
Přispěvatel: JirkaDeLucina 04. 11. 2020, 16:38:38
Podpora Prestashopu neřeší moduly, pouze PS samotný, ti nijak bohužel nepomůžou. Co se týká těch 2 modulů, tak ten filtr nenačítá žádnou svou šablonu, používá AJAX a pomocí něj jen načte vyfiltrované produkty do stávající šablony. Zde problém není. Jelikož AJAX používá i Carousel, tak se navzájem ovlivňují. Jde tedy o to, aby při použití filtrace produktů pomocí AJAXU fungovala i funce Carouselu, která používá také AJAX. Jen nevím, jak to v hlavním .js souboru modulu filtru provést, aby se načetl i AJAX Carouselu a nevypl ho.
Název: Re:Mizející DIV
Přispěvatel: hechj 04. 11. 2020, 23:29:18
Prozkoumejte, co při filtrování chodí ajaxem. Bez toho se nepohnete. Pochybuji, že to budou jen produkty bez html. Já myslím, že to přijde i s html a normálně to přeplácne stávající obsah. Prosím, poslechněte mě a udělejte to. Moc prosím.
Název: Re:Mizející DIV
Přispěvatel: JirkaDeLucina 05. 11. 2020, 16:06:23
Díval jsem se na nastavení modulu pro filtraci produktů. Je tam možnost zobrazovat vyfiltrované produkty pomocí AJAXU, což používáme a produkty se načítají do již načtené aktuální šablony nebo druhou možností je vypnutí ajaxu a načítání produktů do šablony modulu - tuto možnost nepoužíváme, jelikož je pomalejší a šablona modulu úplně rozhodí stránku.

Jde tedy o to, že když se vyfiltrují produkty metodou pomocí AJAXU, tak tento AJAX deaktivuje AJAX, který se stará o Carousel. Potřeboval bych tedy nějak ošetřit, aby se AJAX od carouselu znova restartoval po filtraci produktů nebo nějak ošetřit v kódu AJAXU od modulu filtrace produktů, aby po filtraci spustil i AJAX od carouselu.

V souboru od modulu filtrace produktů jsem našel odkaz na htm zde, ale nevím, zda to k něčemu bude:

Kód: [Vybrat]
function b(t, i) {
L = null, $center = e("#center_column"), 1 == isv7 && ($center = e("#main")), $center.hide("fade", 300, function () {
$center.children().hide(), $center.show(), null == I && (I = $center.children().detach()), $dHtml = e(t.html).hide(), $center.html($dHtml), a(), d(), o(), $center.children().show("fade", {}, "slow", function () {
}), localStorage.setItem("yaasMenu", JSON.stringify(k(t.menu))), r(t.menu, i);
var s = $center.offset().top;
Q && e("html, body").scrollTop() > s && e("html, body").animate({
scrollTop: s
}, 500), e(".yaas_reinit").removeClass("button_disabled").removeAttr("disabled")
})
}

Celý soubor zde:
http://test.darujpoukaz.cz/modules/yetanotheradvancedsearch/views/js/yetanotheradvancedsearch.js (http://test.darujpoukaz.cz/modules/yetanotheradvancedsearch/views/js/yetanotheradvancedsearch.js)

Soubor od carouselu pak zde, pokud by to mohlo pomoci:
http://test.darujpoukaz.cz/modules/hicarouselspack/views/js/cp.owl.carousel.js (http://test.darujpoukaz.cz/modules/hicarouselspack/views/js/cp.owl.carousel.js)
Název: Re:Mizející DIV
Přispěvatel: tecka 05. 11. 2020, 17:41:28
Co tě pořád drží u toho nesmylu o jakési deaktivaci AJAXu?

Už ses podíval na ty šablony a jaká data se ti přenášejí?
Název: Re:Mizející DIV
Přispěvatel: JirkaDeLucina 05. 11. 2020, 20:15:46
Modul pro filtraci produktů vůbec nepoužívá své vlastní šablony. Má sice ve složce "views" podsložku "templates", ale z ní nepoužije jediný soubor, pokud je v nastavení modulu vybrána filtrace produktů pomocí AJAXU. Svou šablonu začne používat až tehdy, pokud se v nastavení modulu vypne filtrace pomocí AJAXU (ověřil jsem to). Bohužel filtraci bez AJAXU použít nemůžu, jelikož to rozhodí komplet všechno a je pomalé při načítání. Proto jsem se zaměřil na AJAX, jelikož když není použit, tak Carousel funguje v pořádku.

Co se týká toho přenosu dat, tak to bych poprosil, jak na to přijdu, jaká data se přenášejí? V minulém příspěvku jsem tady dal odkaz na .js od modulu pro filtraci produktů, ale nevím, zda hledám na správném místě. Děkuji za čas a trpělivost s tímto problémem a jeho řešením :)
Název: Re:Mizející DIV
Přispěvatel: hechj 05. 11. 2020, 23:03:02
Tady končím. Odtud s tím nic neudělám. Vyhledávání žádný ajax nevypíná. Vyhledávání přeplácne seznam produktů i s caruselem novým obsahem a v něm chybí div, který carusel potřebuje pro správnou funkci. V základu nejspíš carusel nepočítá s tím, že by mohl být použit společně s ajaxovým vyhledáváním (nebo naopak). Ale zkoumat to nebudu. Už mi lezete na nervy. Hledáte radu a nenecháte si poradit.
Název: Re:Mizející DIV
Přispěvatel: JirkaDeLucina 26. 11. 2020, 19:21:55
VYŘEŠENO: nakonec bylo třeba upravit .js soubor od carouselu a vynutit carousel tak, aby se znova spoustil, pokud se použije vyhledávání ajaxem:

Kód: [Vybrat]
$(document).ajaxComplete(function(event, xhr, settings) {
    if (settings.url.includes('yetanotheradvancedsearch')) {
        console.log('aaaa');
        setTimeout(function(){
            initCarousels();
        }, 500);
    }
});