ProductAttributes lite

Quick.Cart    Add comments

productattributes

Na QUICK.CART fóru je již delší dobu poptávka po pluginu productAttributes známého z dřívějších verzí Quick.Cart, nyní je bohužel dostupný jen v placených variantách. Pokusil jsem se vytvořit zjednodušenou verzi tohoto pluginu pro jeden atribut, který je ale pro potřebu rozlišení barvy či velikosti plně dostačující.

productattributes2

productattributes3

Nastavení druhů se nalézá v administračním rozhraní, v editaci jednotlivých produktů. Jednoduše stačí vypsat jednotlivé nabízené varianty a oddělovat je středníkem.

Po přidání produktu do košíku se bude název druhu zobrazovat v hranatých závorkách za názvem produktu. Takto bude název zobrazen i v objednávce a faktuře.


Čísla řádků odpovídají originálnímu Quick.Cart v3.4.
(upravené soubory ke stažení)
(verze s duplikovaným pluginem pro dva atributy ke stažení)

Následující části kódu se vkládají na uvedené řádky PŘED text, který se na nich nalézá. Případně kód nahrazuje celou funkci či obsah souboru.

v souboru db/en_products.php je nutné vložit $ na konec každého řádku s daty

nahradit obsah souboru db/en_products.def.php

<?php
$aFieldsNames   = Array( 'iProduct' => 0, 'sName' => 1, 'fPrice' => 2, 'iStatus' => 3, 'iPosition' => 4,  'sAvailable' => 5, 'sDescriptionShort' => 6, 'sTyp' => 7 );
$aFieldsSort    = Array( 'iPosition', 'sName', 'iProduct', 'sAvailable', 'fPrice', 'sDescriptionShort', 'iStatus', 'sTyp' );

function en_products( $aExp ){
return Array( 'iProduct' => $aExp[0], 'sName' => $aExp[1], 'fPrice' => $aExp[2], 'iStatus' => $aExp[3], 'iPosition' => $aExp[4], 'sAvailable' => $aExp[5], 'sDescriptionShort' => $aExp[6], 'sTyp' => $aExp[7] );
}
?>

v souboru db/orders_temp.php je nutné vložit $ na konec každého řádku s daty

nahradit obsah souboru db/orders_temp.def.php

<?php
$aFieldsNames = Array( 'iCustomer' => 0, 'iProduct' => 1, 'iQuantity' => 2, 'fPrice' => 3, 'sName' => 4, 'sTyp' => 5 );

function orders_temp( $aExp ){
return Array( 'iCustomer' => $aExp[0], 'iProduct' => $aExp[1], 'iQuantity' => $aExp[2], 'fPrice' => $aExp[3], 'sName' => $aExp[4], 'sTyp' => $aExp[5] );
}
?>

vložit do souboru templates/products_default.tpl na řádek 36

    $aData[sTyp]

nahradit v souboru templates/pages_default.tpl řádek 74

<div class="basket"><a href="$aData[sLinkName]">$lang[productattributes_lite_buy]</a></div>

nahradit v souboru templates/orders_basket.tpl řádek 10

<label for="quantity$aData[iProduct]">$lang[Quantity]</label><input type="text" name="aProducts[$aData[iProduct]][~$aData[sTyp]]" value="$aData[iQuantity]" size="3" maxlength="4" class="input" id="quantity$aData[iProduct]" alt="int" />

vložit do souboru actions_client/products.php na řádek 7

	if ( $aData['sTyp'] != "" ) {
		$newExplode = explode( '|', $aData['sTyp'] );
		$aData['sTyp'] = "<select name=\"sTyp\">";
		foreach ( $newExplode as $newOption ) {
			$aData['sTyp'] .= "<option value=\"".trim($newOption)."\">".trim($newOption)."</option>";
		}
		$aData['sTyp'].= "</select><br /><br />";
	}

vložit do souboru lang/en.php na řádek 207

$lang['productattributes_lite'] = "Druhy (oddělujte pomocí | )";
$lang['productattributes_lite_buy'] = "Koupit";

vložit do souboru templates/admin/products.tpl na řádek 126

      <!-- typ start -->
      <tr class="l0">
        <td>
          $lang['productattributes_lite']
        </td>
      </tr>
      <tr class="l1">
        <td>
          <input type="text" name="sTyp" value="$aData[sTyp]" class="input" style="width:100%;" />
        </td>
      </tr>
      <!-- typ end -->

vložit do souboru actions_client/p.php na řádek 82

		if ( isset( $_POST['sTyp'] ) ) {
			$sTyp = str_replace( '$', '&#36;', htmlspecialchars (stripslashes( $_POST['sTyp'] ) ) );
		} else {
			$sTyp = "";
		}

nahradit v souboru actions_client/p.php řádek 90

        $oOrder->addToBasket( $iProductAdd, $iQuantity, $sTyp );

nahradit v souboru core/orders.php funkci saveBasket

  /**
  * Save basket
  * @return void
  * @param array $aForm
  */
  function saveBasket( $aForm ){
    if( isset( $aForm['aProducts'] ) && is_array( $aForm['aProducts'] ) ){
      $aFile  = file( DB_ORDERS_TEMP );
      $iCount = count( $aFile );
      $rFile = fopen( DB_ORDERS_TEMP, 'w' );
      flock( $rFile, LOCK_EX );
      for( $i = 0; $i < $iCount; $i++ ){
        if( $i > 0 ){
          $aFile[$i]  = rtrim( $aFile[$i] );
          $aExp       = explode( '$', $aFile[$i] );
          if( isset( $aForm['aProducts'][$aExp[1]]['~'.$aExp[5]] ) && is_numeric( $aForm['aProducts'][$aExp[1]]['~'.$aExp[5]] ) && $aForm['aProducts'][$aExp[1]]['~'.$aExp[5]] > 0 && $aForm['aProducts'][$aExp[1]]['~'.$aExp[5]] < 10000 && $aExp[0] == $_SESSION['iCustomer'.LANGUAGE] ){
            $aExp[2] = (int) $aForm['aProducts'][$aExp[1]]['~'.$aExp[5]];
            $aFile[$i] = trim( implode( '$', $aExp ) )."\n";
          }
          else
            $aFile[$i] .= "\n";
        }
        else{
          $aFile[$i] = '<?php exit; ?>'."\n";
        }

        fwrite( $rFile, $aFile[$i] );
      } // end for
      flock( $rFile, LOCK_UN );
      fclose( $rFile );
    }
  } // end function saveBasket

nahradit v souboru core/orders.php funkci generateBasket

  /**
  * Generates variable with products in basket
  * @return void
  */
  function generateBasket( ){
    $aFile      = file( DB_ORDERS_TEMP );
    $iCount     = count( $aFile );
    $this->aProducts = null;
    $this->fProductsSummary   = null;
    $_SESSION['iOrderQuantity'.LANGUAGE]  = 0;
    $_SESSION['fOrderSummary'.LANGUAGE]   = null;

    for( $i = 1; $i < $iCount; $i++ ){
      $aExp = explode( '$', $aFile[$i] );
      if( isset( $aExp[0] ) && $aExp[0] == $_SESSION['iCustomer'.LANGUAGE] ){
        $this->aProducts[$i] = orders_temp( $aExp );
        $this->aProducts[$i]['sLinkName'] = '?'.$aExp[1].','.change2Url( $this->aProducts[$i]['sName'] );
        $this->aProducts[$i]['fSummary'] = normalizePrice( $this->aProducts[$i]['fPrice'] * $this->aProducts[$i]['iQuantity'] );
		if ( $this->aProducts[$i]['sTyp'] != "" ) { $this->aProducts[$i]['sName'] .= " [".$this->aProducts[$i]['sTyp']."]"; }
        $_SESSION['iOrderQuantity'.LANGUAGE] += $aExp[2];
        $_SESSION['fOrderSummary'.LANGUAGE]  += ( $aExp[2] * $aExp[3] );
      }
    } // end for
    if( isset( $_SESSION['fOrderSummary'.LANGUAGE] ) )
      $this->fProductsSummary = $_SESSION['fOrderSummary'.LANGUAGE] = normalizePrice( $_SESSION['fOrderSummary'.LANGUAGE] );
  } // end function generateBasket

nahradit v souboru core/orders.php funkci addToBasket

  /**
  * Add product to basket
  * @return void
  * @param int  $iProduct
  * @param int  $iQuantity
  * @param str  $sTyp
  * @param int  $iOrder
  */
  function addToBasket( $iProduct, $iQuantity, $sTyp, $iOrder = null ){
    if( !isset( $iOrder ) ){
      $iOrder = $_SESSION['iCustomer'.LANGUAGE];
      $sDb    = DB_ORDERS_TEMP;
    }

    $iQuantity = (int) $iQuantity;
    $aFile  = file( $sDb );
    $iCount = count( $aFile );
    $rFile = fopen( $sDb, 'w' );
    $iTime = time( );
    flock( $rFile, LOCK_EX );
    for( $i = 0; $i < $iCount; $i++ ){
      if( $i > 0 ){
        $aFile[$i]  = rtrim( $aFile[$i] );
        $aExp       = explode( '$', $aFile[$i] );
        if( $aExp[0] == $iOrder ){
          if( $aExp[1] == $iProduct ){
            if( $aExp[5] == $sTyp ){
              if( ( $aExp[2] + $iQuantity ) < 10000 )
                $aExp[2] += (int) $iQuantity;
              $aFile[$i] = trim( implode( '$', $aExp ) )."\n";
              $bFound = true;
            } else {
              $aFile[$i] .= "\n";
            }
          } else {
            $aFile[$i] .= "\n";
          }
        }
        else{
          if( $iTime - substr( $aExp[0], 0, 10 ) >= 259200 ) // delete empty orders older then 72 hours
            $aFile[$i] = null;
          else
            $aFile[$i] .= "\n";
        }
      }
      else{
        $aFile[$i] = '<?php exit; ?>'."\n";
      }

      fwrite( $rFile, $aFile[$i] );
    } // end for

    if( !isset( $bFound ) ){
      $oProduct =& Products::getInstance( );

      fwrite( $rFile, $iOrder.'$'.$iProduct.'$'.$iQuantity.'$'.$oProduct->aProducts[$iProduct]['fPrice'].'$'.$oProduct->aProducts[$iProduct]['sName'].'$'.$sTyp.'$'."\n" );
    }
    flock( $rFile, LOCK_UN );
    fclose( $rFile );
  } // end function addToBasket

Budu rád, pokud se pochlubíte užíváním tohoto pluginu v komentářích.

TODO: Při testování jsem narazil na nedořešený problém. Při odstranění produktu z košíku dojde ke smazání všech položek stejného produktu bez ohledu na jeho druh. Je možné, že časem se zde objeví doplnění řešící i tento problém.


Uvedená práce (dílo) podléhá licenci Creative Commons Attribution-ShareAlike 3.0 Licence Creative Commons

To znamená, že kód (dílo) smíte šířit (kopírovat, distribuovat a sdělovat dílo veřejnosti) a upravovat (pozměňovat, doplňovat, využívat celé nebo částečně v jiných dílech). Za podmínek uvedení autora (uvedení odkazu, viz níže) a zachování licence.

Uvedení odkazu: na každé stránce generované obchodem (či jiným systémem), ve kterém byl kód použit, musí být uveden viditelný odkaz na web eFox.cz ve formátu:

<a title="eFox.cz" href="http://efox.cz">Extended by <strong>eFox.cz</strong></a>




91 Responses to “ProductAttributes lite”

  1. Lukáš Ondráček napsal: | Odpovědět

    Čauvec, vypadá to super, akorá ty dva bugy jsou pro mě trošku zásadní. Jinak když vložím něco do koše tak to tam vidět není (jak píšeš v hranatých zývorkách). Ani po odeslání. Divné.

    • admin napsal: | Odpovědět

      Ahoj, rozhodl jsem se ověřit ještě jednou plnou funkčnost úprav na čisté instalaci. Náhrady a úpravy jsem provedl přesně, jak je napsáno, a dostal jsem fungující rozšíření. Pokud upravuješ jinou verzi nebo verzi upravenou, je velice pravděpodobně, že čísla řádků neodpovídají popisu, je třeba tedy upravovat s rozvahou. Pokud upravuješ pro jiný jazyk, je třeba použít jiné soubory databáze, nikoliv ‘en_’ ale například ‘cz_’. První bug lze odstranit smazáním či zakomentováním řádku 74 ze souboru ‘templates/pages_default.tpl’, zmizí tak možnost zakoupeni ze seznamu produktu, dle mého názoru bývá běžné otevřít si nejdříve detail zboží před nákupem. Druhy bug si vyžádá nějaký čas k dořešení, ale ani tak mi nepřijde běžné, objednání většího množství stejného produktu v různém provedení a následné promazávání. Hodně štěstí, pokud by i nadále problémy setrvaly, je možné se domluvit na pomoci.

    • Racek Kurýr :) napsal: | Odpovědět

      Je to přesně tak, musí se aktualizovat „čistá“ verze, nijak neupravovaná. Nejlepší je si vše zálohovat, znovu nainstalovat a dělat úpravy. Potom porovnat změny oproti stávající verzi nějakým chytrým prográmkem – třeba Total Commander.

  2. Lukáš Ondráček napsal: | Odpovědět

    Samozřejmě en v databázích jsem přepsal na cz, ale i tak to dělá v české verzi problémy. V anglické běhá. A ty dva bugy nakonec pro mě nevadí. První je vyřešen tím, že automaticky je nějaká varianta vybraná, že si zákazník nevybere jinou už není můj problém. Druhej je nepodstatnej pokud maže jen ten jeden ruh zboží. Ještě na to mrknu. Každopádně dík. Lukáš (mobile hacker z QC fóra, to su já ;) )

  3. Lukáš Ondráček napsal: | Odpovědět

    Tak už mi to funguje. Přepsal jsem to pozorněji. Akorát mi přestala fungovat doporučená cena. Neukládá se. Hledám problém.

  4. Lukáš Ondráček napsal: | Odpovědět

    Vyřešeno, chyba byla samozřejmě v databázi, kdy jsem už měl přidanou funkci sOldPrice na sedmé pozici. Takže jsem sTyp jen pošoupl na další pozici. Díky!!!!!!!!!!

    • admin napsal: | Odpovědět

      Perfektní, gratuluji ke zvládnutí komplikací při instalaci, je potřeba si dávat pozor na již nainstalovaná rozšíření. Jak jsem zmínil, až bude volněji, pokusím se chybkám pověnovat. (danny)

      • Lukáš Ondráček napsal: | Odpovědět

        Ono mi to napoprvé nefungovalo vůbec a to proto, že mám přece jenom starší verzi 3.1 a tam ty řádky jsou trochu jinak. Tak jsem si stáhl tvoje upravené soubor a podle nich to opatrně udělal. Pak už jen pohrál s databázema a je to. Dík a měj se. Lukáš

  5. Lukáš Ondráček napsal: | Odpovědět

    Ještě bych měl takový dotaz. Řekněmě, že produkt má atribut 18,5″ v košíku se mi projeví ale za názver produktu jako 18,5\“ . Bude to určitě problém v tom, že tam používám “ . Veřím, že to bere jako konec nějaké hodnoty??

    • admin napsal: | Odpovědět

      Jako konec hodnoty jsem to použito nikde neměl. Chyba je pravděpodobně bohužel ve špatně zvoleném oddělovači, alespoň při mém testování se to nyní potvrdilo, při ukládání se znaky převádí na entity, které končí středníkem a zde je bohužel háček. Pravdou je, že \ se mi nikde nezobrazilo, ale je možné že starší verze přidávají k některým znakům \. Zkus změnit oddělovač a pokud to nepomůže zkus zadávat “ jako entitu &quot;

      Doporučuji změnit oddělovač na | a to takto:

      action_client/product.php řádka 8:
      $newExplode = explode( ‘|’, $aData['sTyp'] );

      lang/en.php řádka 201:
      $lang['productattributes_lite'] = „Druhy (oddělujte pomocí | )“;

      pak v databázi na poslední pozici zaměnit ; za | nejlépe to půjde asi scriptem. Díky za dotaz.

    • admin napsal: | Odpovědět

      Převod “ na entitu je již uvnitř Quick.Cart v core/common-admin.php na řádku 119:

      $sValue = ereg_replace( ‘“‘, ‘&quot;’, $sValue );

      pokud jsi tento soubor neupravoval, měl by se převod provést vždy při ukládání hodnot.

      • Lukáš Ondráček napsal: | Odpovědět

        Máš pravdu shop automaticky převádí “ na " ale já jsem si to pak v databázi ručně přepsal, takže tam je určitě „.

        • Lukáš Ondráček napsal: | Odpovědět

          Jinak změna entity nepomohla

        • admin napsal: | Odpovědět

          Doporučuji ponechat v databázi “ formou entity, neni tomu tak bez důvodu. Pokud převedeš položku druhů v databázi na oddělovač | a zároveň ponecháš “ jako entitu nevidím důvod, proč by ve výpisu mělo být \“. Dle mého názoru právě protože násilně vkládáš do databáze přímo „, pak při výpisu Quick.Cart escapuje “ jako nebezpečný znak, co se děje při výpisu jsem ale přesně nezkoumal. Pokud by problém přetrvával, je možné se domluvit na pomoci přímo s úpravou, bez znalosti kódu a úprav, které jsi provedl, mohu jen odhadovat, co se zde událo.

  6. Petr Holub napsal: | Odpovědět

    Najde se někdo, kdo by na mých stránkách nastavil ProductAttributes lite? Samozřejmě né zadarmo, jsou začátečník a fakt si na to netroufám.
    peta.holub[zavináč]seznam.cz

  7. melo napsal: | Odpovědět

    Zdravím. Při aplikaci pluginu na svůj shop jsem se snažil přidat rovnou druhý atribut (potřebuji u triček velikost i barvu) což se mi sice povedlo, ale stejně se mi každá další varianta přičítá k té první. V PHP se moc nevyznám. Postupoval jsem víceméně naslepo.

    • admin napsal: | Odpovědět

      Zdravím, nerozumím příliš slovu „přičítá“. Jinak samotný plugin by dle mého úsudku měl jít takto dvojitě s obměnou aplikovat, záleží také zda, a případně jaké, úpravy jste provedl při použití návodu.

  8. melo napsal: | Odpovědět

    Myslím tím, že například přidám jedno tričko ve variantě černé S a pak totéž tričko zelené L. V košíku se ale objeví černé S s počtem kusů 2.

    Z úprav to bylo přidání sTyp2 a pak víceméně duplikování v místech kde se objevuje sTyp. Ve funkci generateBasket jsem pak nahradil podmínku:

    if ( $this->aProducts[$i]['sTyp'] != „“ ) { $this->aProducts[$i]['sName'] .= “ [".$this->aProducts[$i]['sTyp'].“]“; }

    pevným:

    $this->aProducts[$i]['sName'] .= “ [".$this->aProducts[$i]['sTyp'].“ – „.$this->aProducts[$i]['sTyp2'].“]“;

    • admin napsal: | Odpovědět

      Pravděpodobně jste neupravil dostatečně přidání produktu do košíku ve funkci addToBasket, kde je nutné kontrolovat shodu jak na
      $aExp[5] == $sTyp
      tak i na
      $aExp[6] == $sTyp2
      a take upravit funkci
      fwrite( ...$sTyp.'$'.$sTyp2.'$'."\n" );
      funkce addToBasket take musi dostat oba atributy jako parametry, kdyz je volana z actions_client/p.php

      • melo napsal: | Odpovědět

        Ano ano, už to jede. Fwrite i p.php bylo vpořádku, ale tu kontrolu jsem tam vůbec neměl. Nicméně nastal jiný problém. Při změně množství produktu v košíku se změní množství všech variant podle údaje u poslední přidané varianty. To stejné se stane při přechodu k objednávce.

        • admin napsal: | Odpovědět

          Máte pravdu, je tam chybka, bude potřeba upravit funkci saveBasket, ve volné chvíli na to mrknu a přidám řešení. Děkuji za upozornění

        • admin napsal: | Odpovědět

          Problém by měl být vyřešen po nahrazeni funkce saveBasket a řádků v souboru templates/orders_basket.tpl

          • melo napsal: |

            To jsem celý já. Když hledám tak najdu :)

            Teď už jenom to deletefrombasket. Já to zatím řeším možností vložit nulu v savebasket

          • admin napsal: |

            Pokud mohu požádat, vložte prosím do patičky webu zpětný odkaz, jak je uvedeno na konci návodu, je to jediná podmínka jinak bezplatného použití.

          • melo napsal: |

            Jinak samozřejmě obrovský dík za výbornou práci. Odkaz tam pochopitelně mám, ale web ještě není v provozu a chvíli to určitě ještě potrvá.

          • admin napsal: |

            V pořádku :) i já děkuji, chtěl jsem se jen podívat, jak to hezky funguje s více atributy.

  9. Samell napsal: | Odpovědět

    Zdravím,

    plugin zdá se pracuje, prosím ale o pomoc s problémy, na které jsem narazil při doinstalování

    1. Dle návodu, soubor core/products.php vytvoří v každé sekci a pouze u prvního produktu odkaz „Vložit do košíku“

    2. Kde se objeví po odeslání objednávky varianta zadaná v roletce

    3. Košík mi nyní vždy vytvoří jednu položku s nulovou hodnotou, kterou není možné smazat.

    Prosím, pokud má někdo podobný problém a vyřešil, informujte zde. Děkuji

    • admin napsal: | Odpovědět

      Také zdravím,

      předně by mě zajímalo, zda jste aplikoval plugin přímo a to na verzi, která je uvedena v úvodu, či na verzi jinou, kde je třeba dělat úpravy s rozmyslem (i v případě již upravovaného obchodu je třeba postupovat pozorně).

      1. Možná se Vám zobrazila starší varianta návodu, úprava v core/products.php byla vypuštěna, z důvodu jakési „nevzhlednosti“ střídajícího se ‘Koupit’ a ‘Vložit do košíku’, nyní stačí úprava v templates/pages_default.tpl, která vloží v seznamu produktů na všechna místa ‘Koupit’ a při stisku je uživatel přesměrován na detail produktu, kde vybere variantu a vloží ji do košíku.

      2. Varianta je vždy za názvem produktu v [], pokud během instalace nezvolíte jiný formát.

      Na 3. otázku asi nejsem schopen bez bližších informací přímo odpovědět.

      • Samell napsal: | Odpovědět

        Zdravím a děkuji za okamžitou reakci. Tyto úpravy jsem prováděl na obchodu, který nikdy pravován nebyl.

        add 1. Měl jste pravdu, postupoval jsem dle stašího návodu. Dle mého názoru, funkce „Koupit“ u každého produktu je zbytečná, když u produktu je „Vložit do košíku“, tedy nepoužil jsem úpravu v templates/pages_default.tpl – řádek 74. Vyřešeno – OK

        add 3. Košík již nic nevytváří, zřejmě způsobeno starší verzí úprav, i když bylo by zajímavé vložit do košíku automatickou položku, která musí být koupena a nelze ji odstranit. :-) Vyřešeno – OK

        add 2. Postupoval jsem dle instalace (kromě templates/pages_default.tpl), potvrzení objednávky přijde, ale hodnota z role se nikde nezobrazí, žádné závorky.

        Jdu na to!

        • admin napsal: | Odpovědět

          Funkce „Koupit“ je zde z důvodu, aby nešlo vložit předmět do košíku bez vybrání varianty. Druhou možností jak to řešit je, vložit podmínku tak, že pokud člověk vloží do košíku produkt bez výběru, doplní se mu rovnou nějaká standardní varianta.

          Varianta se za název produktu přidává do závorek ve funkci „generateBasket“, bez bližšího seznámení s kódem Vám asi nejsem schopen takto pomoci, mohu jen doporučit kontrolu míst úprav. V případě zájmu mě můžete kontaktovat na admin[zavináč]efox.cz

      • Samell napsal: | Odpovědět

        ….ještě k úpravě v templates/pages_default.tpl – tato úprava nevkládala „Koupit“ ke všem produktům, ale pouze k tomu na prvním místě v kategorii….

        • admin napsal: | Odpovědět

          Toto je už z principu podezřelé chování, protože šablona se používá na každý produkt. Pokud se tedy změní šablona výpisu produktu, tato změna se nutně musí projevit na všech produktech, nikoliv na jediném.

  10. Luky napsal: | Odpovědět

    Zdravím … šlo by tohle udělat 2x pod sebo? 1x na barvu a 1x na rozměr? Uměl by to někdo? Mě to nejde…

    • admin napsal: | Odpovědět

      Určitě je to možné, pravděpodobně jste přečetl i komentáře nad Vámi, kde se to již jednou úspěšně podařilo. Je třeba pozorně a s rozmyslem jednotlivé kroky duplikovat, ale jsou zde potřeba již přiměřené znalosti programování v PHP a částečná znalost fungování obchodu zevnitř.

  11. Trambus napsal: | Odpovědět

    Ahoj, děkuji za skvělý plugin! odkaz samozřejmě na web dám, s dovolení do doporučujících stránek. Měl bych ještě jeden dotaz, všechno mi nádherně funguje, až na na to že u posledního produktu mi vyskočila tahle hláška: Fatal error: Allowed memory size of 31457280 bytes exhausted (tried to allocate 35 bytes) in /var/www/web5/funboxers.cz/funboxers.cz/libraries/FlatFiles.php on line 198 Co to znamená? Nevím si s tím rady… díky moc!!!

    • admin napsal: | Odpovědět

      Zdravím, díky za pochvalu:) Hláška znamená, že se obchod pokusil alokovat více paměti, než je mu umožněno, stává se to, když je v obchodě více produktů nebo je limit poskytovatele dosti nízký. Doporučuji napsat na webhosting žádost o zvýšení limitu paměti, většinou je to provedeno naprosto bez problému, některé hostingy nechají uživatele si limit určovat samostatně (v rozumné míře) pomocí souboru .htaccess například „php_value memory_limit 128M“.

      • Trambus napsal: | Odpovědět

        Výborně! pomohlo to, navýšili mi to o 10MB, nyní již tedy 40MB. Je to obvyklá výše limitu? Protože jsem poladil jenom jeden produkt a opět se mi objeví stránka prázdná a dokonce už bez hlášky…Napsal jsem jim o nové navýšení. Doufám, že to pomůže.

        • admin napsal: | Odpovědět

          Navýšení vyřešilo hlášku, pokud se zobrazuje prázdná stránka, problém bude třeba hledat asi jinde.

          • Trambus napsal: |

            Ahoj, trošku jsem pátral po netu, a tahle hláška se oběvuje spoustě lidem, jak Fatal Error, tak prázdná stránka. Je to, obojí, jak říkáš, nedostatkem paměti. Ovšem ne každý hosting ochotně navyšuje. Danny je možné, abych udělal v kódu někde takovou chybu, že by mě to „žralo“ paměť? Jsem nyní u gigaserveru, nemám raději hledat jiný hosting? Začínám se 14 druhy zboží, ale do budoucna čekám daleko větší počet. Viz. http://www.funboxers.cz. Díky za reakce! Ahoj

          • admin napsal: |

            Zdravím, tak možné to určitě je, například stačí někde neúmyslně vytvářet cyklicky objekty nebo pole, případně i rekurze by mohla zlobit. Možné je ale i to, že prostě úvodní limit byl nízký a nyní by už požadovaná paměť nemusela růst tak rychle. Vyzkoušení jiného hostingu s někým po domluvě na subdoméně asi stojí i za zkoušku, ale pokud nemáš problém s žádostmi o navýšení, osobně bych hned neutíkal, pokud vše jinak funguje. Hodně štěstí!

          • kuryr napsal: |

            ahoj mám stejný problém, ale přijde mi divné, že když tam mám nahráno asi 30produktů a jen tim že přidám od atributů hodnoty sx,s,… tak mi to nahlásí problém s pamětí:) snad to vyřeší navýšení. Plugin je parádní a určo přidám odkaz, jen doufám že vyřešim problém s tou pamětí. zatím děkuji

          • admin napsal: |

            Ahoj, věřím, že problém se tím vyřeší, případně by ještě mohlo dojít k plnění paměti chybnou aplikací úprav nebo i chybou při vytváření pluginu, i to je možne. Dan

          • martin napsal: |

            myslim, ze to je zpusobeno tim, ze v db\cz_products.php (nebo en_…) je po uprave atributu (u me to byla velikost) u kazdeho produktu na zacatku souboru pridana spousta znaku $, staci je tedy vymazat a na serveru se nemusi kapacita zvysovat… alespon u me toto reseni fungovalo…

  12. Trambus napsal: | Odpovědět

    už mi to funguje, zkontroloval jsem kód a v souborech orders_temp.php a en_product.php jsem zapomněl vložit symbol $. Danny, ještě jednou díky moc!

  13. Leos_Mays_Hayes napsal: | Odpovědět

    Ahoj Danny!

    Předně bych Ti chtěl poděkovat za skvělý plugin. Po něčem takovém jsem zrovna pátral.
    Zkusil jsem na mém Quick Cart 3.4 e-shopu upravit soubory „cz“ namisto „en“ a nyní mi to vyhazuje chybovou hlášku:

    Fatal error: Call to undefined function cz_products() in /home/www/retrotrika.cz/subdomeny/www/core/products.php on line 59

    Nejsem v PHP přímo kovaný. Nemáš náhodou ponětí, jak by se to dalo napravit?

    Děkuji a jsem s pozdravem!

    • admin napsal: | Odpovědět

      Zdravím a díky, v souboru ‘db/cz_products.def.php’ přejmenuj na 5. řádku funkci „en_products“ na „cz_products“, to by mělo Tvůj problém snad vyřešit. Měj se a hodně zdaru..

      • Leos_Mays_Hayes napsal: | Odpovědět

        Děkuji za tak rychlou reakci, Danny. Už to funguje bez problémů. Až bude můj e-shop v provozu, tak pošlu link :)
        Ještě jednou díky!

  14. kuryr napsal: | Odpovědět

    Ahoj, měl bych ještě takový dotaz. Bylo by nějak možné dořešit produk atribut, že kdyby si člověk vybral z kolonky barvu tak by se mu náhledový obrázek změnil? Hrozně moc by to pomohlo jelikož teď když bych chtěl mít trička různých barev tak bych je musel mít všecky rozepsané a je to hrozná dřina je nahrávat upravovat jim popisky kličova slova a navíc to vypadá nehezky. Takhle by to bylo jen jedno triko a v atributech by se vybrala barva tím by se změnil obrazek a zákazník by si mohl ještě vybrati velikost. Za takový kompletní plugin bych byl ochotný přihodit finanční odměnu:)a myslím, že i plno dalších. Děkuji

    ( http://www.adler.info/index2.php?loginframe=TRI%C4%8CKA ) takhle nějak by to mohlo taky být:)

    • admin napsal: | Odpovědět

      Zdravím, jak rád říkám, vytvořit jde skoro cokoliv, je to jen otázkou času a následně občas i financí. Pokud jsem správně pochopil, měl bys vložen dvakrát tento plugin. Jednou by byl použit k výběru velikosti a podruhé k výběru barvy, kdy při změně barvy by se změnil i zobrazený obrázek. V základu je potřeba tedy rozšířit plugin o volitelnou možnost obrázku, což je potřeba nějak vyřešit i v administraci (jak přiřadit obrázek) a následně i ve zpracování informace o vybraném atributu produktu v průběhu přidání do košíku, mazání a odeslání objednávky. Druhou věcí je pak sepsat nějaký skriptík který obstará výměnu obrázků. To je jen takový nástin, pokud by jsi měl zájem o bližší dohodu, budu rád, když mi napíšeš na mail (odkaz webmaster vpravo dole). Měj se a díky, Dan

  15. portall napsal: | Odpovědět

    Zdravím
    Implementoval jsem úpravu na Quick Cart v úpravě H2. Všechno funguje korektně, jen atribut v hranatých závorkách se mi v objednávce nebo v košíku zobrazuje jako číslo například: „LED bodovka HKE27-3 [20]“ Potřeboval bych trošku pomoci kde hledat chybu…
    Díky

    • admin napsal: | Odpovědět

      Též zdravím, odepsal jsem již na mail, ale zde ve zkratce, doporučuji kontrolu definičních souborů pro databázi, zda se shodují počty položek i jejich pozice. V tomto případě bych řekl, že se jedná o posunutí a zobrazuje se výše daně, jak jste psal. Mějte se

  16. Marián Slejzák napsal: | Odpovědět

    Zdravím,
    snažím sa nainštalovať tento plugin do verzie v3.0, v admine to funguje, ale aj po niekoľkonásobnom opakovaní stále mi nezobrazuje okienko pri produkte a pri vkladaní do košíka prichádzam k hláške:
    Fatal error: Call to undefined method Products::getInstance() in /www/mirea.biz/public_html/_sub/v30/core/orders.php on line 237
    Čo robím zle?
    Ďakujem za radu
    (PS: skúšam to na kópii eshopu http://www.v30.mirea.biz)

  17. Marián Slejzák napsal: | Odpovědět

    Už som to vyriešil prechodom na verziu 3.4.
    Ďakujem za plugin

    • admin napsal: | Odpovědět

      Gratuluji k úspěchu, problém byl pravděpodobně právě v tom, že od verze 3.0 k verzi 3.4 se kód interně dosti změnil. Přeji bezproblémové užívání.

  18. Juraj Krajicek napsal: | Odpovědět

    Mam problem s bielou strankou, pridam productattributes asi na 5 produktov, potom mi to uz ide pomalsie a asi po desiatom to skonci bielou obrazovkou. Ked si potom pozrem subor cz_products.php tak tam je toto:

    $$$$$$$
    $
    $$$$$$$
    $
    $$$$$$$
    $
    $$$$$$$

    a tie dolare tam predtym neboli, az ked som pridaval tie atributy.

    • admin napsal: | Odpovědět

      Zdravím, viděl bych to na chybnou úpravu databáze při aplikaci pluginu. Doporučuji obnovit databázi ze zálohy a postupně projít a kontrolovat úpravy, které se mají provést. Postup na úpravy je psán pro čistý shop, pokud jste již využíval i jiné pluginy, třeba toto brát v potaz a úpravy provádět s rozmyslem, i zde mohla tato chyba vzniknout.

    • Lukáš Ondráček napsal: | Odpovědět

      Tato chyba nastává pokud do databáze na všechny řádky nevložíte nakonec $.

  19. stepan bartek napsal: | Odpovědět

    zdravim,

    mam problem s plnou funkcnosti v upravene verzi. v kosiku se mi spatne pocita mnozstvi polozek, pokud se do nej prida vice variant stejneho zbozi. prosim nekoho, kdo tomu vice rozumi (idealne p. remis), aby se mi ozval.

    kc odmena

    diky

    stepan bartek
    tel 608 434 184
    icq 206 021 992
    st6 (zav) seznam.cz

    • admin napsal: | Odpovědět

      Příjemný večer přeji, co myslíte přesně počítáním položek? Celkový počet v košíku či pouze počet určitého typu produktu? Nebo jinak? K zaslání případných detailů prosím použijte odkaz webmaster v pravém dolním rohu, děkuji.

  20. Ephrajim napsal: | Odpovědět

    Ahoj Danny ;) potřebuji poradit ;) plugin jsem dal na stránky a vše vypadá, že funguje, ale když si dám zboží do košíku a pak kliknu na další tak to nic neudělá :( nedostanu se dál. Nevíš co s tím?
    Díky Fry ;)

    • admin napsal: | Odpovědět

      Zdravím, to je takto obtížné říci, přirovnal bych to k věštění z koule :) každopádně je to podivné chování, ale z těchto údajů Ti nejsem schopen pomoci, zkus vrátit úpravy ze zálohy a provést instalaci pluginu obezřetně opětovně.

    • tamir napsal: | Odpovědět

      Ak si urobil vsetky kroky pozorne podla Dannyho,tak este nezabudni zalozit stranku s objednavkou. Ak ju nemas tak vtedy moze robit presne to, ze v kosiku ked kliknes na dalsi tak nic sa nestane

  21. Hurdis napsal: | Odpovědět

    Ahoj, díky moc za tenhle plugin ;) chvíli mi to dalo zabrat, ale nakonec to vyšlo díky radám tady v diskuzi.
    Ještě jednou díky mooc ;) až bude web tak každopádně budeš v patičce ;)

  22. spinster napsal: | Odpovědět

    Čau,
    plugin samotný mi funguje bez problémů, ale zkouším ho rozšířit na dva Atributy. Dělal jsem to podle tohohle postupu a všude upravoval na dva (sTyp, sTyp2), ale nakonec mi to háže chybu:
    „parse error, expecting `T_FUNCTION’ in „orders.php“ on line 534″
    Soubor uploadován: „http://leteckaposta.cz/121046295″
    Asi jsem to někde špatně doplnil. Mohli byste se na to jen tak zběžně mrknout, jestli nenajdete problém?
    Předem díky.

    • spinster napsal: | Odpovědět

      PS: Pokud to vyřešíme, rád dodám celé řešení dvou atributů.

    • tamir napsal: | Odpovědět

      Zdravim,
      tiež by som potreboval aplikovat plugin na dva Atributy.
      V PHP jazyku som len zaciatocnik, tak necviem ci to pomoze, ale ked som sa tak pozeral na ten tvoj order.php, mam pocit že chyba by mohla byt vo funkci generateBasket.
      podla mna by ta podmienka zohladnujuca druhy atribut mala vyzerat inak, ja by som ju dal asi v takomto tvare:

      if ( $this->aProducts[$i]['sTyp2'] != „“ ) { $this->aProducts[$i]['sName'] .= “ [".$this->aProducts[$i]['sTyp'].$this->aProducts[$i]['sTyp2'].“]“; }

      • spinster napsal: | Odpovědět

        Bohužel, ani takhle to nejede. Tahle podmínka by podle mě ani nezhroutila celou stránku. Musíme prostě hledat :)

    • tamir napsal: | Odpovědět

      v tvojom zdrojaku je ta podmienka na riadku 78

      ak to pomoze, daj mi prosim vediet, vdaka

    • admin napsal: | Odpovědět

      Zdravím, pokud vydržíte do zítra, mrknu na to, teď jsem měl dosti jiné práce. Dan
      PS: nepřeji si, aby návod byl zveřejněn na jiném webu, můj názor je ten, že každý, komu bych doporučil pustit se do této úpravy, by měl být schopen řešení zduplikovat, jsem ochotný přidat k návodu upravené soubory s duplikovaným pluginem, ale návod jako takový by to pouze znepřehlednilo

    • admin napsal: | Odpovědět

      Ještě doplním komentář k této chybě, koukl jsem do kódu a máš tam dvě chyby. První způsobí toto hlášení, při kopírování IF podmínky ve funkci addToBasket jsi neukončil složenou závorku, což byl důvod hlášení, později by se projevila i chybějící ELSE větev k tomu to IFu. Druhá chyba se nachází ve funkci saveBasket, kde jsi zapomněl přidat položku pole pro druhý atribut, zde by se též nefunkčnost později projevila. Věřím, že nyní již vše poběží bez problémů.

  23. tamir napsal: | Odpovědět

    cawes Dany,
    tým „…daj mi vediet“ som urcite nemyslel, ze by sa tvoj navod zverejnil na nejakej inej stranke.
    Stale sa trapim s tym suborom „orders.php“ teda aspon myslim ze ostatne duplikovanie som zvladol dobre, ak by si mohol pridat k navodu upravené subory s duplikovanym pluginom, bolo by to super :)

    • admin napsal: | Odpovědět

      Zdárek, verze s duplikovaným pluginem je ke stažení na http://efox.cz/wp-content/uploads/2010/04/productattributes2.7z Link je přidán i v původním příspěvku. Doufám, že to vyřeší veškeré komplikace.

      • tamir napsal: | Odpovědět

        cawes,
        tak sa mi konecne podarilo najst moju chybu, zabudol som uzavriet podmienku vo funkcii addtobasket, tá moja nepozornost :)

        Dakujem za verziu s duplikovanym pluginom, dost mi pri tom pomohla

  24. _kaktus__ napsal: | Odpovědět

    No nevím jestly se to řešilo určitě jo ale jsem asi slepy ;) Nefunguje mi to v CZ pořad piše „Fatal error: Call to undefined function cz_products() in /home/free/ic.cz/c/compphone/root/www/core/products.php on line 59″ ale když si to přepnu na EN tak to funguje v pohodě :) Kde je cbyba ? nebo co mám doplnit ? :) díík

    • admin napsal: | Odpovědět

      V souboru cz_products.def.php máš špatně en_products má tam být cz_products.

    • _kaktus__ napsal: | Odpovědět

      Chybu už mi nepíše :) ale nemůžu přidávat nebo upravovat produkty .. to zas už vubec nwm ;)

  25. Ephrajim napsal: | Odpovědět

    Dobrý den,

    Nevíte prosím jak nainstalovat plugin do quick.cartu H2? (http://www.quickcart-eshop.cz/)

    • admin napsal: | Odpovědět

      Jelikož se jedná o mutaci klasického Quick.Cartu, předpokládám, že s trochou obezřetnosti půjde aplikovat popsaný postup.

  26. cesir napsal: | Odpovědět

    Dobrý den,
    zkouším nainstalovat rozšíření na v.3,6.V anglické verzi bez problémů ale v české to zlobí.Konkrétně v admin menu je to O.K nicméně na stránkách se možnost výběru atributu nezobrazí.Poradí někdo prosím?Díky.

    • admin napsal: | Odpovědět

      Česká i anglická verze jsou ekvivalentní, mění se jen načítání frází ze souborů s překladem, konfigurací a načtení jiných databázových souborů. Odhadoval bych tedy, že chyba bude v neupravení databázových souborů pro českou verzi, pravděpodobně s předponou „cz_“ či „cs_“.

      • cesir napsal: | Odpovědět

        Děkuji za odpověď,šlo pouze o to,že v admin části jsem zapomněl aktivovat košík.Nyní to tedy již jde ale z nějakého důvodu mi nejde uložit změna atributů z admin modulu.Hlásí to „chybu serveru….“.Samozřejmě chmod je všude nastaven.Předpokládám,že se mění jen en_products.def.php a db/orders_temp.def.php a samozřejmě lang/cz.php,ostatní jsem nakopíroval z již funkční verze.Při uložení zeditovaného produktu se tato změna zapisuje kam?Nebo jaká rutina se spouští?Zkusím se v tom večer pohrabat.V anglické verzi je to bez problémů.Děkuji.

      • cesir napsal: | Odpovědět

        Jen pro doplnění HTTP 500 Vnitřní chyba serveru……

  27. cesir napsal: | Odpovědět

    Problém vyřešen,děkuji za posporu.Bohužel z mně neznámého důvodu jsem měl v products.php velmi dlouhý řetězec $$$$$$$$$$$$$$ a to samozřejmě způsobilo time-out serveru.Funguje bezvadně i ve verzi 3.6, děkuji za super úpravu….

    • admin napsal: | Odpovědět

      Perfektní, jsem rád, že po drobné komplikaci funguje bez problémů.

      • cesir napsal: | Odpovědět

        No,ono to úplně tak bez problémů není.Zjistil jsem,že uvedený řetězec se mi tam vkládá asi při uložení změny v produktu.Když ho manuálně odmažu tak je vše O.K.Nevíte kde při ukládání nebo zpracování změny z administrace může být chyba?

        • admin napsal: | Odpovědět

          Co mohu posoudit, tak vkládaný výpis databáze vypadal bez problémů, ale prosím případné bližší informace do mailu nebo jen pár řádků, toto bylo již moc. Z uvedených informací těžko soudit, doporučuji překontrolovat funkci addToBasket, více mě z toho co je zde uvedeno nenapadá.

          • cesir napsal: |

            Omlouvám se.Pro ilustraci:
            Původní soubor:

            149$1000342 Dostihové sedlo$4100.00$1$0$7 dní$Dostihové sedlo Daslo z barevné kůže$500gr|2$
            150

            A toto to udělá po přidání nebo smazání atributů:

            $$$$$$$$
            $
            $$$$$$$
            $
            $$$$$$$
            149$1000342 Dostihové sedlo$4100.00$1$0$7 dní$Dostihové sedlo Daslo z barevné kůže$500gr|2$
            150

            Do DB jsem dodatečně ještě přidal další $ na konec a je to lepší(přidává to méně $).

          • admin napsal: |

            S největší pravděpodobností jsi zapomněl přidat na konec každého řádku v databázi znak $ v souborech db/en_products.php a db/orders_temp.php a databázový soubor se následně díky špatnému počtu $ takto chová.

          • cesir napsal: |

            Ano,na to jsem také myslel ale ono mi to dělá i když překopíruji originál en_products.php do českého prostředí (samozřejmě přejmenuji).Tzn.chyba bude asi někde jinde.

          • admin napsal: |

            Jak je vidět u 18.tého komentáře chyba odpovídá přesně stejnému výsledku, nemyslím, že by naprosto stejný projev měla i jiná chyba, doporučuji projít pozorně, zda na konci každého řádku s daty je přidán znak $.

Leave a Reply

Premium Wordpress Themes by Natty WP. Web Hosting
Images by our golf tips desEXign.