[дополнения] Мои разработки

Тема в разделе "Shop-script", создана пользователем fominsa, 12 май 2008.

Статус темы:
Закрыта.
  1. fominsa

    fominsa

    Регистр.:
    12 фев 2008
    Сообщения:
    234
    Симпатии:
    229
    Эту тему я создал для выкладывания скриптов, дополнений, функций написаных мной просьба ответы не оставлять все вопросы через дополнительные темы.

    Деление прайс-листа на страницы

    Для того чтобы ваш прайс лист делился на страницы с фиксированым количеством товаров в файле includes/pricelist.php просто заменяйте все на это.
    PHP:
    <?php
        define
    ("MAX_TOWAR_IN_PRAIS_LIST",20);
        
    // show whole price list
        
    $_GET["mmm"]=0;
        function 
    pricessCategories($parent,$level)
        {
            
    //same as processCategories(), except it creates a pricelist of the shop
            
    $out = array();
            
    $cnt 0;
            
    $q1 db_query("select categoryID, name from ".CATEGORIES_TABLE.
                
    " where parent=$parent order by sort_order, name") or die (db_error());
            while ((
    $row db_fetch_row($q1))&&($_GET["mmm"]<MAX_TOWAR_IN_PRAIS_LIST+$_GET["page"])){
                
    //define back color of the cell
                
    $r hexdec(substr(CONF_MIDDLE_COLOR02)); 
                
    $g hexdec(substr(CONF_MIDDLE_COLOR22)); 
                
    $b hexdec(substr(CONF_MIDDLE_COLOR42)); 
                
    $m = (float)max($rmax($g,$b));
                
    $r round((190+20*min($level,3))*$r/$m);
                
    $g round((190+20*min($level,3))*$g/$m);
                
    $b round((190+20*min($level,3))*$b/$m);
                
    $c dechex($r).dechex($g).dechex($b); //final color

                //add category to the output
                
    $out[$cnt][0] = $row[0];
                
    $out[$cnt][1] = $row[1];
                
    $out[$cnt][2] = $level;
                
    $out[$cnt][3] = $c;
                
    $out[$cnt][4] = 0//0 is for category, 1 - product
                
    $cnt++;

                if ( !isset(
    $_GET["sort"]) )
                    
    $order_clause "order by sort_order";
                else
                {
                    
    //verify $_GET["sort"]
                    
    switch ($_GET["sort"]){
                        default:
                            
    $_GET["sort"] = "name";
                        case 
    'name':
                        case 
    'Price':
                        case 
    'customers_rating':
                            break;
                    }

                    
    $order_clause " order by ".$_GET["sort"];
                    if ( isset(
    $_GET["direction"]) )
                    {
                        if ( !
    strcmp$_GET["direction"] , "DESC" ) )
                            
    $order_clause .= " DESC ";
                        else
                            
    $order_clause .= " ASC ";
                    }
                }

                
    $sql "
                    select productID, name, Price, in_stock from "
    .PRODUCTS_TABLE.
                    
    " where categoryID=".$row[0]."  and enabled=1 ".
                    
    $order_clause."
                "
    ;
                
    //add products
                
    $q db_query$sql ) or die (db_error());
                while (
    $row1 db_fetch_row($q))
                {
                    
    $_GET["mmm"]++;
                    if (
    $_GET["mmm"]>$_GET["page"]&&$_GET["mmm"]<=$_GET["page"]+MAX_TOWAR_IN_PRAIS_LIST){
                        if (
    $row1[2] <= 0)
                            
    $row1[2]= "n/a";
                        else
                            
    $row1[2] = show_price($row1[2]);
                        
    //add product to the output
                        
    $out[$cnt][0] = $row1[0];
                        
    $out[$cnt][1] = $row1[1];
                        
    $out[$cnt][2] = $level;
                        
    $out[$cnt][3] = "FFFFFF";
                        
    $out[$cnt][4] = 1//0 is for category, 1 - product
                        
    $out[$cnt][5] = $row1[2];
                        
    $out[$cnt][6] = $row1[3];
                        
    $cnt++;
                    }
                }
                
    //process all subcategories
                
    if ($_GET["mmm"]<=($_GET["page"]+MAX_TOWAR_IN_PRAIS_LIST)){
                    
    $sub_out pricessCategories($row[0], $level+1);
                }
                
    //add $sub_out to the end of $out
                
    for ($j=0$j<count($sub_out); $j++){
                    
    $out[] = $sub_out[$j];
                    
    $cnt++;
                }
             }
            return 
    $out;
        } 
    //pricessCategories

        
    function _sortPriceListSetting( &$smarty$urlToSort )
        {
            
    $sort_string STRING_PRICELIST_ITEM_SORT;
            
    $sort_string str_replace"{ASC_NAME}",   
                
    "<a href='".$urlToSort."&sort=name&direction=ASC'>".STRING_ASC."</a>",    $sort_string );
            
    $sort_string str_replace"{DESC_NAME}",  
                
    "<a href='".$urlToSort."&sort=name&direction=DESC'>".STRING_DESC."</a>",    $sort_string );
            
    $sort_string str_replace"{ASC_PRICE}",   
                
    "<a href='".$urlToSort."&sort=Price&direction=ASC'>".STRING_ASC."</a>",    $sort_string );
            
    $sort_string str_replace"{DESC_PRICE}",  
                
    "<a href='".$urlToSort."&sort=Price&direction=DESC'>".STRING_DESC."</a>",    $sort_string );
            
    $smarty->assign"string_product_sort"$sort_string );
        }

        if (isset(
    $_GET["show_price"])) //show pricelist
        
    {
            
    _sortPriceListSetting$smarty"index.php?show_price=yes" );
            list(
    $max_product)=mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM ".PRODUCTS_TABLE." WHERE `enabled`=1&&categoryID!=1"));
            
    $max_pages=ceil($max_product/MAX_TOWAR_IN_PRAIS_LIST);
            
    $_GET["page"]=(isset($_GET["page"])&&(int)$_GET["page"]>=0&&(int)$_GET["page"]<$max_pages)?(int)$_GET["page"]*MAX_TOWAR_IN_PRAIS_LIST:0;
            
    $pricelist_elements pricessCategories(1,0);
            
    $pricelist_elements=array_reverse($pricelist_elements);
            foreach (
    $pricelist_elements as $key=>$val){
                if (
    $val[4]==1){
                    
    $maximym=$val[2];
                }else{
                    if (
    $val[2]<=$maximym)$maximym--; else unset($pricelist_elements[$key]);
                }
            }
            
    $pricelist_elements=array_reverse($pricelist_elements);
            
    $smarty->assign("pricelist_pages"$max_pages);
            
    $smarty->assign("pricelist_now_page", (int)$_GET["page"]/MAX_TOWAR_IN_PRAIS_LIST);
            
    $smarty->assign("pricelist_elements"$pricelist_elements);
            
    $smarty->assign("main_content_template""pricelist.tpl.html");
        }

    ?>
    define("MAX_TOWAR_IN_PRAIS_LIST",20); число 20 меняете на свое это и есть цифра которая указывает скрипту количество товаров на странице.

    Далее в templates\frontend\tmpl1\pricelist.tpl.html

    там где необходимо вывести навигацию по страницам пишем:
    HTML:
    
    <table cellpadding="0" cellspacing="0" border="0"><tr>
    {section name=i loop=$pricelist_pages}
    <td width="25">{if $smarty.section.i.index ne $pricelist_now_page}<a href="/index.php?show_price=yes&page={$smarty.section.i.index}">{$smarty.section.i.index+1}</a>{else}{$smarty.section.i.index+1}{/if}</td>	
    {/section}
    </tr></table>
    
    Разбирайтесь с оформлением и все прайс разбит на страницы!


    Дерево категорий с картинками или из картинок

    core_functions/category_functions.php
    этот файл отвечает за функции категорий

    так вот ищем две функции

    PHP:
    function catGetCategoryCompactCList$selectedCategoryID )
    {
    $path catCalculatePathToCategory$selectedCategoryID );
    $res = array();
    $res[] = array( "categoryID" => 1"parent" => null
    "name" => ADMIN_CATEGORY_ROOT,"picture"=>"""level" => );
    $q db_query"select categoryID, parent, name ,picture from ".CATEGORIES_TABLE.
    " where parent=1 ".
    " order by sort_order, name " );

    while( 
    $row db_fetch_row($q) )
    {
    $row["level"] = 1;
    $res[] = $row;
    if ( 
    count($path) > )
    {
    if ( 
    $row["categoryID"] == $path[1]["categoryID"] )
    {
    $array _recursiveGetCategoryCompactCList$path);
    foreach( 
    $array as $val )
    $res[] = $val;
    }
    }
    }
    return 
    $res;
    }
    и вторая
    PHP:
    function _recursiveGetCategoryCompactCList$path$level )
    {
    $q db_query"select categoryID, parent, name ,picture from ".CATEGORIES_TABLE.
    " where parent=".$path[$level-1]["categoryID"]." order by sort_order, name " );
    $res = array();
    $selectedCategoryID null;
    while( 
    $row=db_fetch_row($q) )
    {

    $row["level"] = $level;
    $res[] = $row;
    if ( 
    $level <= count($path)-)
    {
    if ( (int)
    $row["categoryID"] == (int)$path[$level]["categoryID"] )
    {
    $selectedCategoryID $row["categoryID"];
    $array _recursiveGetCategoryCompactCList$path$level+);
    foreach( 
    $array as $val )
    $res[] = $val;
    }
    }
    }

    return 
    $res;
    }
    В эти функции я добавил новое поле picture
    просто замените свои функции моими и тогда в шаблоне
    \templates\frontend\tmpl*\category_tree.tpl.html заменяем {$categories_tree.name}</a>
    на это
    {if $categories_tree.picture ne ""}<img border=0 src="products_pictures/{$categories_tree.picture}" alt="{$categories_tree.name|replace:'"':'&quot;'}">{/if}{$categories_tree.name}</a>
    то что окрашено зеленым это имя категории если хотите можете удалить
    это и будет вывод рисунка!





    Функция создания правильного окончания в зависимости от количества
    Не знаю как вам а мне всегда не нравилось когда пишут что то подобное: 1 товар(ов), Уважаемый(ая).
    поэтому для shop scripta я сделал мини функцию которая делает правильное окончание взависимости от числа
    например:
    • 1 товар
    • 2 товара
    • 5 товаров
    • 151 товар
    пользуйтесь

    В файл core_functions/functions.php в самый низ вставляем следующую функцию
    PHP:
    function true_end($chislo,$n1,$n2,$n5){
        
    $chislo=(int)$chislo;
        
    $ch=substr($chislo,-1);
        if (
    $ch==1){
            if (
    strlen($chislo)>1){
                
    $result=substr($chislo,-2,1)==1?$n5:$n1;
            }else{
                
    $result=$n1;
            }
        }elseif(
    $ch>1&&$ch<5){
            if (
    strlen($chislo)>1){
                
    $result=substr($chislo,-2,1)==1?$n5:$n2;
            }else{
                
    $result=$n2;
            }
        }else{
            
    $result=$n5;
        }
        return 
    $result;
    }
    Эта функция принимает 4 переменных
    • $chislo -- число которому необходимо окончание
    • $n1 -- текст при еденице (товар, день)
    • $n2 -- текст при двух еденицах (товара, дня)
    • $n5 -- текст при пяти еденицах (товаров, дней)
    возвращает именно тот текст который вам нужен

    для того чтобы это прикрепить к нашей корзине надо поправить 4 файла:
    \includes\shopping_cart.php
    PHP:
    //ищем 
    //$resCart = cartGetCartContent();
    //ниже дописываем
    $prod_num=0;
    foreach (
    $resCart["cart_content"] as $value){$prod_num+=$value["quantity"];}
    $smarty->assign("shopping_cart_ended"true_end($prod_num,"товар","товара","товаров"));
    \includes\shopping_cart_info.php
    PHP:
    //ищем 
    //$smarty->assign("shopping_cart_items", $cnt);
    //ниже дописываем
    $smarty->assign("shopping_cart_ended"true_end($cnt,"товар","товара","товаров"));
    \templates\frontend\shop\shopping_cart_info.tpl.html
    PHP:
    //ищем
    //{$smarty.const.CART_CONTENT_NOT_EMPTY}
    //Заменяем на 
    {$shopping_cart_ended}
    \templates\frontend\shop\shopping_cart.tpl.html
    PHP:
    //ищем
    //{$smarty.const.STRING_PRODUCTS}
    //Заменяем на
    {$shopping_cart_ended}
     
    IRIDON, wayker47, Docento и 10 другим нравится это.
  2. fominsa

    fominsa

    Регистр.:
    12 фев 2008
    Сообщения:
    234
    Симпатии:
    229
    1234567890
     
    Phoenix_666, mariohs и OledJAH нравится это.
  3. OledJAH

    OledJAH Читатель

    Заблокирован
    Регистр.:
    3 фев 2008
    Сообщения:
    124
    Симпатии:
    26
    О! Спец предложения это то что надо=) Будь добр посоветовать как эти спецпредложения выводить в любых местах. Ну всмысле чтоб я по всей главной их мох раскидать, если такое реально канечно=)
     
  4. fominsa

    fominsa

    Регистр.:
    12 фев 2008
    Сообщения:
    234
    Симпатии:
    229
  5. fominsa

    fominsa

    Регистр.:
    12 фев 2008
    Сообщения:
    234
    Симпатии:
    229
    1234567890
     
    ndmitry нравится это.
  6. alexandr3182

    alexandr3182

    Регистр.:
    5 фев 2008
    Сообщения:
    226
    Симпатии:
    12
    У меня выходят товары, по одному из каждой категории, но они не меняются. т.е. одни и те же. И как их поделить в 2 столбика?
     
  7. Hmelex

    Hmelex

    Регистр.:
    15 апр 2008
    Сообщения:
    515
    Симпатии:
    119
    Ищите раздел про модули


    Ищите раздел про модули..даже на этом сайте что то да есть
     
  8. fominsa

    fominsa

    Регистр.:
    12 фев 2008
    Сообщения:
    234
    Симпатии:
    229
    Конкретней какой скрипт ставиш. (СОЗДАЙ НОВУЮ ТЕМУ С ВОПРОСОМ)


    твое сообщение не несет никакой полезной информации так зачем вообще писать?
    перед тем как ваять чтото в народ сами прочтите что написали и подумайте а нужно ли кому-нибудь тот текст который вы набрали скорее всего ответ будет нет!
    НАРОД В ГЛАЗА НЕ ДОЛБИТЕСЬ ПРОСИЛ ЖЕ НЕ ПИСАТЬ В ЭТОЙ ТЕМЕ ЗДЕСЬ ТОЛЬКО ВЫВЕШИВАЮ СКРИПТЫ!!!

    :mad::mad:
     
    DSL-Group, IRIDON, Docento и ещё 1-му нравится это.
Статус темы:
Закрыта.