shopNC注册后无法登陆的问题

eBestMall 发表了文章 • 0 个评论 • 214 次浏览 • 2018-08-23 17:17 • 来自相关话题

 
登录成功但跳过去还是没登陆,原因是服务器的session没打开。
 
1、查看phpStudy服务器 版本
2、找到对应版本的php.ini文件。并修改session.auto_start这行。把0改为1,设置为自动启用。3、修改后重启下phpStudy服务就可以了。
 
 
登录成功但跳过去还是没登陆,原因是服务器的session没打开。
 
1、查看phpStudy服务器 版本
2、找到对应版本的php.ini文件。并修改session.auto_start这行。把0改为1,设置为自动启用。3、修改后重启下phpStudy服务就可以了。 查看全部
 
登录成功但跳过去还是没登陆,原因是服务器的session没打开。
 
1、查看phpStudy服务器 版本
2、找到对应版本的php.ini文件。并修改session.auto_start这行。把0改为1,设置为自动启用。3、修改后重启下phpStudy服务就可以了。
 
 
登录成功但跳过去还是没登陆,原因是服务器的session没打开。
 
1、查看phpStudy服务器 版本
2、找到对应版本的php.ini文件。并修改session.auto_start这行。把0改为1,设置为自动启用。3、修改后重启下phpStudy服务就可以了。

shopnc b2b2c初次运行提示Class Error: mysqli.isn't exists!的解决方法

eBestMall 发表了文章 • 0 个评论 • 278 次浏览 • 2018-08-23 17:17 • 来自相关话题

今天在自己电脑上配置好shopnc b2b2c后运行,提示错误信息:Class Error: mysqli.isn't exists!




后来经过一番辛苦找到报错的源头:\core\framework\db\mysqli.php中

private static function connect($host = 'slave'){


.....

self::$link[$host] = @new mysqli($conf['dbhost'], $conf['dbuser'], $conf['dbpwd'], $conf['dbname'], $conf['dbport']);          //从这一行代码报错


.....






原因是:PHP配置不正确。




解决方法:修改PHP配置文件php.ini,将;extension=php_mysqli.dll前面的分号去掉,重启Apache。




再次运行,OK了! 查看全部
今天在自己电脑上配置好shopnc b2b2c后运行,提示错误信息:Class Error: mysqli.isn't exists!




后来经过一番辛苦找到报错的源头:\core\framework\db\mysqli.php中

private static function connect($host = 'slave'){


.....

self::$link[$host] = @new mysqli($conf['dbhost'], $conf['dbuser'], $conf['dbpwd'], $conf['dbname'], $conf['dbport']);          //从这一行代码报错


.....






原因是:PHP配置不正确。




解决方法:修改PHP配置文件php.ini,将;extension=php_mysqli.dll前面的分号去掉,重启Apache。




再次运行,OK了!

shopnc 实现手机、邮箱、用户名登录

eBestMall 发表了文章 • 0 个评论 • 219 次浏览 • 2018-08-23 17:16 • 来自相关话题

 
 
$username = trim($_POST['user_name']);            
            $RegExp='/^(?:13|15|18)[0-9]{9}$/'; //手机
            $RegExpemail='/^[a-z0-9][a-z\.0-9-_]+@[a-z0-9_-]+(?:\.[a-z]{0,3}\.[a-z]{0,2}|\.[a-z]{0,3}|\.[a-z]{0,2})$/i'; //邮箱
               if(preg_match($RegExp,$username)){
                $array['member_mobile'] = $username;
            }else if(preg_match($RegExpemail,$username)){
                $array['member_email'] = $username;
            }else{
                $array['member_name'] = $username;
            }        
            
            $array['member_passwd']    = md5($_POST['password']);        
            $member_info = $model_member->infoMember($array); 查看全部
 
 
$username = trim($_POST['user_name']);            
            $RegExp='/^(?:13|15|18)[0-9]{9}$/'; //手机
            $RegExpemail='/^[a-z0-9][a-z\.0-9-_]+@[a-z0-9_-]+(?:\.[a-z]{0,3}\.[a-z]{0,2}|\.[a-z]{0,3}|\.[a-z]{0,2})$/i'; //邮箱
               if(preg_match($RegExp,$username)){
                $array['member_mobile'] = $username;
            }else if(preg_match($RegExpemail,$username)){
                $array['member_email'] = $username;
            }else{
                $array['member_name'] = $username;
            }        
            
            $array['member_passwd']    = md5($_POST['password']);        
            $member_info = $model_member->infoMember($array);

SHOPNC 中开启sphinx全文检索

eBestMall 发表了文章 • 0 个评论 • 208 次浏览 • 2018-08-23 17:15 • 来自相关话题

SHOPNC只支持迅搜全文检索

但通过修改可以添加shpinx/coreseek中文全文检索

安装coreseek,这个网上有很多教程,这里不再多嘴

修改:/data/config/config.ini.php
$config['fullindexer']['open']      = true;
$config['fullindexer']['type']      = 'coreseek';
$config['fullindexer']['coreseek']['server']      = '0573shop.vicp.net';
$config['fullindexer']['coreseek']['port']      = 9312;
$config['fullindexer']['coreseek']['querylimit']      = 20;
$config['fullindexer']['coreseek']['rankingmode']      = NULL;
$config['fullindexer']['coreseek']['matchmode']      = NULL;
$config['fullindexer']['coreseek']['index_shop']      = 'shop';
$config['fullindexer']['coreseek']['index_store']      = 'store_list';

修改/shop/control/search.php:
public function auto_completeOp() {
   try {
            if(C('fullindexer.appname')){
           require(BASE_DATA_PATH.'/api/xs/lib/XS.php');
           $obj_doc = new XSDocument();
           $obj_xs = new XS(C('fullindexer.appname'));
           $obj_index = $obj_xs->index;
           $obj_search = $obj_xs->search;
           $obj_search->setCharset(CHARSET);
                $corrected = $obj_search->getExpandedQuery($_GET['term']);
                if (count($corrected) !== 0) {
                    $data = array();
                    foreach ($corrected as $word)
                    {
                        $row['id'] = $word;
                        $row['label'] = $word;
                        $row['value'] = $word;
                        $data[] = $row;
                    }
                    exit(json_encode($data));
                }
            }elseif(C('fullindexer.type')=='coreseek'){
                //try{


                    require ( BASE_DATA_PATH.'/api/sphinxapi.php' );


                    $cl = new SphinxClient ();
                    $cl->SetServer ( C('fullindexer.coreseek.server'), C('fullindexer.coreseek.port'));
                    $cl->SetConnectTimeout ( 20 );
                    $cl->SetArrayResult ( true );
                    //$cl->SetMatchMode ( SPH_MATCH_ANY);
                    //echo iconv( 'UTF-8', 'GBK',$_GET['term']); //将字符串的编码从GB2312转到UTF-8 
                    //$cl->SetFilter ( "goods_name", [$_GET['term']]);
                    $res = $cl->Query ( $_GET['term'], "*" );
                    //exit(json_encode($res));
                    //php echo urlShop('goods','index',array('goods_id'=>$v['goods_id']));
                    if(count($res['matches'])>0){
                        $data = array();
                        //$md =  Model('goods');
                        foreach($res['matches'] as $item){
                            if(!$item['attrs']['goods_name'])continue;
                            $row=array();
                            $row['id'] = $item['id'];
                            //$good = $md->getGoodsInfo(array('goods_id'=>$item['id']));
                            $row['value'] = $item['attrs']['goods_name'];;// // $good['goods_jingle'];// 
                            $row['label'] = $item['attrs']['goods_name']; //$good['goods_name'];// 在下拉框中的值
                            $row['url']    = urlShop('goods','index',array('goods_id'=>$item['id'])); 
                            $data[] = $row;
                        }
                        //$data[] = $res;
                        exit(json_encode($data));
                    }
               // }
            }
        } catch (XSException $e) {
            if (is_object($obj_index)) {
                $obj_index->flushIndex();
            }
//             Log::record('search\auto_complete'.$e->getMessage(),Log::RUN);
        }
}
实现了首页搜索框的自动完成

附coreseek conf文件参考:



#源定义
source shop
{
    type                    = mysql


    sql_host                = DBHOST
    sql_user                = DBUSER
    sql_pass                = DBPASS
    sql_db                    = DBNAME
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8


    sql_query                = SELECT goods_id, goods_name, store_id FROM shopnc_goods
                                                              #sql_query第一列id需为整数
                                                              #title、content作为字符串/文本字段,被全文索引
    #sql_attr_uint            = goods_id           #从SQL读取到的值必须为整数
    sql_attr_uint            = store_id           #从SQL读取到的值必须为整数
    #sql_attr_timestamp        = date_added #从SQL读取到的值必须为整数,作为时间属性
    #sql_attr_string           = goods_name
    # sql_field_string         = store_name
    sql_field_string          = goods_name
    sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
    sql_query_info            = SELECT * FROM shopnc_goods WHERE goods_id=$id #命令行查询时,从数据库读取原始数据信息
}
source store_list 
{
    type                    = mysql
    sql_host                = localhost
    sql_user                = root
    sql_pass                = root
    sql_db                    = shopnc
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8
    sql_query  = SELECT store_id , store_name, grade_id,member_name,seller_name,store_address,store_keywords,\
    store_description,store_qq FROM shopnc_store
    sql_field_string         = store_name
    sql_field_string         = member_name
    sql_field_string         = store_address
    sql_field_string         = store_description
}


#index定义
index shop
{
    source            = shop             #对应的source名称
    path            = E:/public/coreseek41/var/data/shop #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    docinfo            = extern
    mlock            = 0
    morphology        = none
    min_word_len        = 1
    html_strip                = 0


    #中文分词配置,详情请查看:http://www.coreseek.cn/product ... mseg/
    #charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    charset_dictpath = E:/public/coreseek41/etc/                           #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
    #以下部分为中文分词核心配置
    #stopwords      = /path/to/stowords.txt的位置
    ngram_len                    = 0
    #以上部分为中文分词核心配置
}
index store_list:shop
{
    source = store_list
    path            = E:/public/coreseek41/var/data/store_list 
}
#全局index定义
indexer
{
    mem_limit            = 128M
}


#searchd服务定义
searchd
{
    listen                  =   9312
    read_timeout        = 5
    max_children        = 30
    max_matches            = 1000
    seamless_rotate        = 0
    preopen_indexes        = 0
    unlink_old            = 1
    pid_file = E:/public/coreseek41/var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    log = E:/public/coreseek41/var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    query_log = E:/public/coreseek41/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    binlog_path =                                #关闭binlog日志
} 查看全部
SHOPNC只支持迅搜全文检索

但通过修改可以添加shpinx/coreseek中文全文检索

安装coreseek,这个网上有很多教程,这里不再多嘴

修改:/data/config/config.ini.php
$config['fullindexer']['open']      = true;
$config['fullindexer']['type']      = 'coreseek';
$config['fullindexer']['coreseek']['server']      = '0573shop.vicp.net';
$config['fullindexer']['coreseek']['port']      = 9312;
$config['fullindexer']['coreseek']['querylimit']      = 20;
$config['fullindexer']['coreseek']['rankingmode']      = NULL;
$config['fullindexer']['coreseek']['matchmode']      = NULL;
$config['fullindexer']['coreseek']['index_shop']      = 'shop';
$config['fullindexer']['coreseek']['index_store']      = 'store_list';

修改/shop/control/search.php:
public function auto_completeOp() {
   try {
            if(C('fullindexer.appname')){
           require(BASE_DATA_PATH.'/api/xs/lib/XS.php');
           $obj_doc = new XSDocument();
           $obj_xs = new XS(C('fullindexer.appname'));
           $obj_index = $obj_xs->index;
           $obj_search = $obj_xs->search;
           $obj_search->setCharset(CHARSET);
                $corrected = $obj_search->getExpandedQuery($_GET['term']);
                if (count($corrected) !== 0) {
                    $data = array();
                    foreach ($corrected as $word)
                    {
                        $row['id'] = $word;
                        $row['label'] = $word;
                        $row['value'] = $word;
                        $data[] = $row;
                    }
                    exit(json_encode($data));
                }
            }elseif(C('fullindexer.type')=='coreseek'){
                //try{


                    require ( BASE_DATA_PATH.'/api/sphinxapi.php' );


                    $cl = new SphinxClient ();
                    $cl->SetServer ( C('fullindexer.coreseek.server'), C('fullindexer.coreseek.port'));
                    $cl->SetConnectTimeout ( 20 );
                    $cl->SetArrayResult ( true );
                    //$cl->SetMatchMode ( SPH_MATCH_ANY);
                    //echo iconv( 'UTF-8', 'GBK',$_GET['term']); //将字符串的编码从GB2312转到UTF-8 
                    //$cl->SetFilter ( "goods_name", [$_GET['term']]);
                    $res = $cl->Query ( $_GET['term'], "*" );
                    //exit(json_encode($res));
                    //php echo urlShop('goods','index',array('goods_id'=>$v['goods_id']));
                    if(count($res['matches'])>0){
                        $data = array();
                        //$md =  Model('goods');
                        foreach($res['matches'] as $item){
                            if(!$item['attrs']['goods_name'])continue;
                            $row=array();
                            $row['id'] = $item['id'];
                            //$good = $md->getGoodsInfo(array('goods_id'=>$item['id']));
                            $row['value'] = $item['attrs']['goods_name'];;// // $good['goods_jingle'];// 
                            $row['label'] = $item['attrs']['goods_name']; //$good['goods_name'];// 在下拉框中的值
                            $row['url']    = urlShop('goods','index',array('goods_id'=>$item['id'])); 
                            $data[] = $row;
                        }
                        //$data[] = $res;
                        exit(json_encode($data));
                    }
               // }
            }
        } catch (XSException $e) {
            if (is_object($obj_index)) {
                $obj_index->flushIndex();
            }
//             Log::record('search\auto_complete'.$e->getMessage(),Log::RUN);
        }
}
实现了首页搜索框的自动完成

附coreseek conf文件参考:



#源定义
source shop
{
    type                    = mysql


    sql_host                = DBHOST
    sql_user                = DBUSER
    sql_pass                = DBPASS
    sql_db                    = DBNAME
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8


    sql_query                = SELECT goods_id, goods_name, store_id FROM shopnc_goods
                                                              #sql_query第一列id需为整数
                                                              #title、content作为字符串/文本字段,被全文索引
    #sql_attr_uint            = goods_id           #从SQL读取到的值必须为整数
    sql_attr_uint            = store_id           #从SQL读取到的值必须为整数
    #sql_attr_timestamp        = date_added #从SQL读取到的值必须为整数,作为时间属性
    #sql_attr_string           = goods_name
    # sql_field_string         = store_name
    sql_field_string          = goods_name
    sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
    sql_query_info            = SELECT * FROM shopnc_goods WHERE goods_id=$id #命令行查询时,从数据库读取原始数据信息
}
source store_list 
{
    type                    = mysql
    sql_host                = localhost
    sql_user                = root
    sql_pass                = root
    sql_db                    = shopnc
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8
    sql_query  = SELECT store_id , store_name, grade_id,member_name,seller_name,store_address,store_keywords,\
    store_description,store_qq FROM shopnc_store
    sql_field_string         = store_name
    sql_field_string         = member_name
    sql_field_string         = store_address
    sql_field_string         = store_description
}


#index定义
index shop
{
    source            = shop             #对应的source名称
    path            = E:/public/coreseek41/var/data/shop #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    docinfo            = extern
    mlock            = 0
    morphology        = none
    min_word_len        = 1
    html_strip                = 0


    #中文分词配置,详情请查看:http://www.coreseek.cn/product ... mseg/
    #charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    charset_dictpath = E:/public/coreseek41/etc/                           #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
    #以下部分为中文分词核心配置
    #stopwords      = /path/to/stowords.txt的位置
    ngram_len                    = 0
    #以上部分为中文分词核心配置
}
index store_list:shop
{
    source = store_list
    path            = E:/public/coreseek41/var/data/store_list 
}
#全局index定义
indexer
{
    mem_limit            = 128M
}


#searchd服务定义
searchd
{
    listen                  =   9312
    read_timeout        = 5
    max_children        = 30
    max_matches            = 1000
    seamless_rotate        = 0
    preopen_indexes        = 0
    unlink_old            = 1
    pid_file = E:/public/coreseek41/var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    log = E:/public/coreseek41/var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    query_log = E:/public/coreseek41/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    binlog_path =                                #关闭binlog日志
}

shopnc excel导出功能

eBestMall 发表了文章 • 0 个评论 • 268 次浏览 • 2018-08-23 17:14 • 来自相关话题

1 首先你要有这个类









<?php
/**
 * 生成Excel文件类
 *
 * @package    library* www.shopjl.com网店运维技术交流中心为你提供售后服务 以便你更好的了解
 */
defined('BYshopJL') or exit('Access Invalid!');
class Excel{
    /**
    * excel文档头(返回的行)
    *
    * 依照excel xml规范。
    * @access private
    * @var string
    */
    private $header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?\>
    <Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"
    xmlns:x=\"urn:schemas-microsoft-com:office:excel\"
    xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"
    xmlns:html=\"http://www.w3.org/TR/REC-html40\">";

    /**
    * excel页脚
    * 依照excel xml规范。
    *
    * @access private
    * @var string
    */
    private $footer = "</Workbook>";
    
    //设置一列的宽度
    private $colWidth = "";
    
    /**
    * 文档行(行数组中)
    *
    * @access private
    * @var array
    */
    private $lines = array ();
    /**
    * 工作表(数组)
    *
    * @access private
    * @var array
    */
    private $worksheets = array ();
    /**
    * 单元格样式
    * @access private
    * @var string
    */
    private $cellstyle = array();
    
    /**
    * 默认单元格数据格式
    * @access private
    * @var string
    */
    private $default_cellformat = "String";
    
    public function __construct(){
        //设置默认样式
        $this->cellstyle['Default'] = '<Style ss:ID="Default" ss:Name="Normal">
               <Alignment ss:Vertical="Center"/>
               <Borders/>
               <Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
               <Interior/>
               <NumberFormat/>
               <Protection/>
              </Style>';
    }
    /**
    * 添加单行数据
    *
    * @access private
    * @param array 1维数组
    * @todo 行创建
    */
    private function addRow ($array)
    {
        //初始化单元格
        $cells = "";
        //构建单元格
        foreach ($array as $k => $v){
            $style_str = '';
            if(!empty($v['styleid'])){
                $style_str = 'ss:StyleID="'.$v['styleid'].'"';
            }
            $format_str = $this->default_cellformat;
            if(!empty($v['format'])){
                $format_str = $v['format'];
            }
            $cells .= "<Cell {$style_str} ><Data ss:Type=\"{$format_str}\">{$v['data']}</Data></Cell>\n";
        }
        //构建行数据
        $this->lines[] = "<Row>\n" . $cells . "</Row>\n";            
    }
    /**
    * 添加多行数据
    * @access public
    * @param array 2维数组
    * @todo 构造多行
    */
    public function addArray ($array)
    {
        $this->lines = array();
        //构建行数据
        foreach ((array)$array as $k => $v){
            $this->addRow ($v);
        }
    }
    
    //设置一列的宽度    列号     宽度值 要在addWorksheet 前使用 可以参考member.php 写法
    public function setWidth($index,$value){        
        $this->colWidth .="<Column ss:Index=\"$index\" ss:AutoFitWidth=\"0\" ss:Width=\"$value\" />\n";
    }
    /**
    * 添加工作表
    * @access public
    * @param string $sheettitle 工作表名
    * @todo 构造工作表XML
    */
    public function addWorksheet($sheettitle)
    {
        //剔除特殊字符
        $sheettitle = preg_replace ("/[\\\|:|\/|\?|\*|
|
|
]/", "", $sheettitle);
        //现在,将其减少到允许的长度
        //$sheettitle = substr ($sheettitle, 0, 50);
        $str  = "\n<Worksheet ss:Name=\"$sheettitle\">\n<Table ss:DefaultRowHeight=\"20\">\n";
        $str .= $this->colWidth;
        $str .= implode ("\n", $this->lines).
                    "</Table>\n</Worksheet>\n";
        $this->worksheets[] = $str;
    }
    /**
    * 设置单元格样式
    * 
    * @access public
    * @param array 样式数组例如: array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1'));
    * 当id为Default时,为表格的默认样式
    */
    public function setStyle ($style_arr){
        if(empty($style_arr)){
            return false;
        }
        $id = $style_arr['id'];
        unset($style_arr['id']);
        $style_str = "<Style ss:ID=\"$id\">";
        foreach($style_arr as $k=>$v){
            $tmp = '';
            foreach((array)$v as $k_item=>$v_item){
                $tmp .= (" ss:$k_item=\"$v_item\"");
            }
            $style_str .= "<$k ".$tmp.'/>';
        }
        
        $this->cellstyle[$id] = $style_str.'</Style>';
    }
    /**
    * 设置默认单元格格式
    * 
    * @access public
    * @param string
    */
    public function setDefaultFormat ($format_str){
        if(empty($style_arr)){
            return false;
        }
        $this->default_cellformat = $format_str;
    }
    /**
    * 生成excel文件
    * 最后生成excel文件,并使用header()函数来将它交付给浏览器。
    * @access public
    * @param string $filename 文件名称
    */
    public function generateXML ($filename)
    {
        $encoded_filename = urlencode($filename);
        $encoded_filename = str_replace("+", "%20", $encoded_filename);
        //头
        $ua = $_SERVER["HTTP_USER_AGENT"];
        header("Content-Type: application/vnd.ms-excel");
        if(preg_match("/MSIE/", $ua)){
            header('Content-Disposition: attachment; filename="'.$encoded_filename.'.xls"');
        }else if(preg_match("/Firefox/", $ua)){
            header('Content-Disposition: attachment; filename*="utf8\'\''.$filename.'.xls"');
        }else{
            header('Content-Disposition: attachment; filename="'.$filename.'.xls"');
        }
        header('Cache-Control: max-age=0');
        echo stripslashes ($this->header);
        //样式
        echo "\n<Styles>";
        foreach((array)$this->cellstyle as $k=>$v){
            echo "\n".$v;
        }
        echo "\n</Styles>";
        //工作表
        echo implode ("\n", $this->worksheets);
        echo $this->footer;
    }

    /**
     * 转码函数
     *
     * @param mixed $content
     * @param string $from
     * @param string $to
     * @return mixed
     */
    public function charset($content, $from='gbk', $to='utf-8') {
        $from = strtoupper($from) == 'UTF8' ? 'utf-8' : $from;
        $to = strtoupper($to) == 'UTF8' ? 'utf-8' : $to;
        if (strtoupper($from) === strtoupper($to) || empty($content)) {
            //如果编码相同则不转换
            return $content;
        }
        if (function_exists('mb_convert_encoding')) {
             if (is_array($content)){
                $content = var_export($content, true);
                $content = mb_convert_encoding($content, $to, $from);
                eval("\$content = $content;");return $content;
            }else {
                return mb_convert_encoding($content, $to, $from);
            }
        } elseif (function_exists('iconv')) {
             if (is_array($content)){
                $content = var_export($content, true);
                $content = iconv($from, $to, $content);
                eval("\$content = $content;");return $content;
            }else {
                return iconv($from,$to,$content);
            }
        } else {
            return $content;
        }
    }
}
?>



其次 你要能用 
 代码 大概如下




    //导出全部会员信息
    public function member_export_allOp(){
        $model = Model("member");

      //这段都不用太看 就是组合 查询条件
        $member_grade = $model->getMemberGradeArr();
        
        if ($_GET['search_field_value'] != '') {
            switch ($_GET['search_field_name']){
                case 'member_name':
                    $condition['member_name'] = array('like', '%' . trim($_GET['search_field_value']) . '%');
                    break;
                case 'member_email':
                    $condition['member_email'] = array('like', '%' . trim($_GET['search_field_value']) . '%');
                    break;
                case 'member_truename':
                    $condition['member_truename'] = array('like', '%' . trim($_GET['search_field_value']) . '%');
                    break;
            }
        }
        switch ($_GET['search_state']){
            case 'no_informallow':
                $condition['inform_allow'] = '2';
                break;
            case 'no_isbuy':
                $condition['is_buy'] = '0';
                break;
            case 'no_isallowtalk':
                $condition['is_allowtalk'] = '0';
                break;
            case 'no_memberstate':
                $condition['member_state'] = '0';
                break;
        }
        //会员等级
        $search_grade = intval($_GET['search_grade']);
        if ($search_grade >= 0 && $member_grade){
            $condition['member_exppoints'] = array(array('egt',$member_grade[$search_grade]['exppoints']),array('lt',$member_grade[$search_grade+1]['exppoints']),'and');
        }
        //排序
        $order = trim($_GET['search_sort']);
        if (empty($order)) {
            $order = 'member_id desc';
        }
        
        if (!is_numeric($_GET['curpage'])){
            $count = $model->where($condition)->count();
            $array = array();
            if ($count > self::EXPORT_SIZE ){    //显示下载链接
                $page = ceil($count/self::EXPORT_SIZE);
                for ($i=1;$i<=$page;$i++){
                    $limit1 = ($i-1)*self::EXPORT_SIZE + 1;
                    $limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
                    $array[$i] = $limit1.' ~ '.$limit2 ;
                }
                Tpl::output('list',$array);
                Tpl::output('murl','index.php?act=member&op=member');
                Tpl::showpage('export.excel');
            }else{    //如果数量小,直接下载
                $data = $model->where($condition)->order('member_id desc')->limit(self::EXPORT_SIZE)->select();
                $this->createExcel($data);
            }
        }else{    //下载
            $limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
            $limit2 = self::EXPORT_SIZE;
            $data = $model->where($condition)->order('member_id desc')->limit("{$limit1},{$limit2}")->select();
            $this->createExcel($data);
        }
    }
    
     
    private function createExcel($data = array()){
        Language::read('export');
        import('libraries.excel');
        $excel_obj = new Excel();
        $excel_data = array();
        //设置样式
        
        $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1'))); 
        //header
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'会员');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'真实姓名');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'登录次数');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'最后登录时间');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'最后登录ip');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'积分');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'可用预存款');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'冻结预存款'); 
         
        foreach ((array)$data as $k=>$v){
            $tmp = array();
            $tmp[] = array('data'=>$v['member_name']);
            $tmp[] = array('data'=>$v['member_truename']);
            $tmp[] = array('data'=>$v['member_login_num']);
            $tmp[] = array('data'=>empty($v['member_login_time'])?"":date('Y-m-d H:i:s',$v['member_login_time'])); 
            $tmp[] = array('data'=>$v['member_login_ip']); 
            $tmp[] = array('data'=>$v['member_points']);
            $tmp[] = array('data'=>'可用'.$v['available_predeposit']);
            $tmp[] = array('data'=>"冻结".$v['freeze_predeposit']); 
            $excel_data[] = $tmp;
        }
        

       //设置每列宽度

        $excel_obj->setWidth(1,100);
        $excel_obj->setWidth(2,100);
        $excel_obj->setWidth(3,100);
        $excel_obj->setWidth(4,140);
        $excel_obj->setWidth(5,100);
        $excel_obj->setWidth(6,100);
        $excel_obj->setWidth(7,100);
        $excel_obj->setWidth(8,100);
        
        $excel_data = $excel_obj->charset($excel_data,CHARSET);
        $excel_obj->addArray($excel_data);
        $excel_obj->addWorksheet($excel_obj->charset('会员信息',CHARSET));
        $excel_obj->generateXML($excel_obj->charset('会员信息',CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
    }



行吧 就这样吧  大概就是 xml  被 excel 识别了 查看全部
1 首先你要有这个类









<?php
/**
 * 生成Excel文件类
 *
 * @package    library* www.shopjl.com网店运维技术交流中心为你提供售后服务 以便你更好的了解
 */
defined('BYshopJL') or exit('Access Invalid!');
class Excel{
    /**
    * excel文档头(返回的行)
    *
    * 依照excel xml规范。
    * @access private
    * @var string
    */
    private $header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?\>
    <Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"
    xmlns:x=\"urn:schemas-microsoft-com:office:excel\"
    xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"
    xmlns:html=\"http://www.w3.org/TR/REC-html40\">";

    /**
    * excel页脚
    * 依照excel xml规范。
    *
    * @access private
    * @var string
    */
    private $footer = "</Workbook>";
    
    //设置一列的宽度
    private $colWidth = "";
    
    /**
    * 文档行(行数组中)
    *
    * @access private
    * @var array
    */
    private $lines = array ();
    /**
    * 工作表(数组)
    *
    * @access private
    * @var array
    */
    private $worksheets = array ();
    /**
    * 单元格样式
    * @access private
    * @var string
    */
    private $cellstyle = array();
    
    /**
    * 默认单元格数据格式
    * @access private
    * @var string
    */
    private $default_cellformat = "String";
    
    public function __construct(){
        //设置默认样式
        $this->cellstyle['Default'] = '<Style ss:ID="Default" ss:Name="Normal">
               <Alignment ss:Vertical="Center"/>
               <Borders/>
               <Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
               <Interior/>
               <NumberFormat/>
               <Protection/>
              </Style>';
    }
    /**
    * 添加单行数据
    *
    * @access private
    * @param array 1维数组
    * @todo 行创建
    */
    private function addRow ($array)
    {
        //初始化单元格
        $cells = "";
        //构建单元格
        foreach ($array as $k => $v){
            $style_str = '';
            if(!empty($v['styleid'])){
                $style_str = 'ss:StyleID="'.$v['styleid'].'"';
            }
            $format_str = $this->default_cellformat;
            if(!empty($v['format'])){
                $format_str = $v['format'];
            }
            $cells .= "<Cell {$style_str} ><Data ss:Type=\"{$format_str}\">{$v['data']}</Data></Cell>\n";
        }
        //构建行数据
        $this->lines[] = "<Row>\n" . $cells . "</Row>\n";            
    }
    /**
    * 添加多行数据
    * @access public
    * @param array 2维数组
    * @todo 构造多行
    */
    public function addArray ($array)
    {
        $this->lines = array();
        //构建行数据
        foreach ((array)$array as $k => $v){
            $this->addRow ($v);
        }
    }
    
    //设置一列的宽度    列号     宽度值 要在addWorksheet 前使用 可以参考member.php 写法
    public function setWidth($index,$value){        
        $this->colWidth .="<Column ss:Index=\"$index\" ss:AutoFitWidth=\"0\" ss:Width=\"$value\" />\n";
    }
    /**
    * 添加工作表
    * @access public
    * @param string $sheettitle 工作表名
    * @todo 构造工作表XML
    */
    public function addWorksheet($sheettitle)
    {
        //剔除特殊字符
        $sheettitle = preg_replace ("/[\\\|:|\/|\?|\*|
|
|
]/", "", $sheettitle);
        //现在,将其减少到允许的长度
        //$sheettitle = substr ($sheettitle, 0, 50);
        $str  = "\n<Worksheet ss:Name=\"$sheettitle\">\n<Table ss:DefaultRowHeight=\"20\">\n";
        $str .= $this->colWidth;
        $str .= implode ("\n", $this->lines).
                    "</Table>\n</Worksheet>\n";
        $this->worksheets[] = $str;
    }
    /**
    * 设置单元格样式
    * 
    * @access public
    * @param array 样式数组例如: array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1'));
    * 当id为Default时,为表格的默认样式
    */
    public function setStyle ($style_arr){
        if(empty($style_arr)){
            return false;
        }
        $id = $style_arr['id'];
        unset($style_arr['id']);
        $style_str = "<Style ss:ID=\"$id\">";
        foreach($style_arr as $k=>$v){
            $tmp = '';
            foreach((array)$v as $k_item=>$v_item){
                $tmp .= (" ss:$k_item=\"$v_item\"");
            }
            $style_str .= "<$k ".$tmp.'/>';
        }
        
        $this->cellstyle[$id] = $style_str.'</Style>';
    }
    /**
    * 设置默认单元格格式
    * 
    * @access public
    * @param string
    */
    public function setDefaultFormat ($format_str){
        if(empty($style_arr)){
            return false;
        }
        $this->default_cellformat = $format_str;
    }
    /**
    * 生成excel文件
    * 最后生成excel文件,并使用header()函数来将它交付给浏览器。
    * @access public
    * @param string $filename 文件名称
    */
    public function generateXML ($filename)
    {
        $encoded_filename = urlencode($filename);
        $encoded_filename = str_replace("+", "%20", $encoded_filename);
        //头
        $ua = $_SERVER["HTTP_USER_AGENT"];
        header("Content-Type: application/vnd.ms-excel");
        if(preg_match("/MSIE/", $ua)){
            header('Content-Disposition: attachment; filename="'.$encoded_filename.'.xls"');
        }else if(preg_match("/Firefox/", $ua)){
            header('Content-Disposition: attachment; filename*="utf8\'\''.$filename.'.xls"');
        }else{
            header('Content-Disposition: attachment; filename="'.$filename.'.xls"');
        }
        header('Cache-Control: max-age=0');
        echo stripslashes ($this->header);
        //样式
        echo "\n<Styles>";
        foreach((array)$this->cellstyle as $k=>$v){
            echo "\n".$v;
        }
        echo "\n</Styles>";
        //工作表
        echo implode ("\n", $this->worksheets);
        echo $this->footer;
    }

    /**
     * 转码函数
     *
     * @param mixed $content
     * @param string $from
     * @param string $to
     * @return mixed
     */
    public function charset($content, $from='gbk', $to='utf-8') {
        $from = strtoupper($from) == 'UTF8' ? 'utf-8' : $from;
        $to = strtoupper($to) == 'UTF8' ? 'utf-8' : $to;
        if (strtoupper($from) === strtoupper($to) || empty($content)) {
            //如果编码相同则不转换
            return $content;
        }
        if (function_exists('mb_convert_encoding')) {
             if (is_array($content)){
                $content = var_export($content, true);
                $content = mb_convert_encoding($content, $to, $from);
                eval("\$content = $content;");return $content;
            }else {
                return mb_convert_encoding($content, $to, $from);
            }
        } elseif (function_exists('iconv')) {
             if (is_array($content)){
                $content = var_export($content, true);
                $content = iconv($from, $to, $content);
                eval("\$content = $content;");return $content;
            }else {
                return iconv($from,$to,$content);
            }
        } else {
            return $content;
        }
    }
}
?>



其次 你要能用 
 代码 大概如下




    //导出全部会员信息
    public function member_export_allOp(){
        $model = Model("member");

      //这段都不用太看 就是组合 查询条件
        $member_grade = $model->getMemberGradeArr();
        
        if ($_GET['search_field_value'] != '') {
            switch ($_GET['search_field_name']){
                case 'member_name':
                    $condition['member_name'] = array('like', '%' . trim($_GET['search_field_value']) . '%');
                    break;
                case 'member_email':
                    $condition['member_email'] = array('like', '%' . trim($_GET['search_field_value']) . '%');
                    break;
                case 'member_truename':
                    $condition['member_truename'] = array('like', '%' . trim($_GET['search_field_value']) . '%');
                    break;
            }
        }
        switch ($_GET['search_state']){
            case 'no_informallow':
                $condition['inform_allow'] = '2';
                break;
            case 'no_isbuy':
                $condition['is_buy'] = '0';
                break;
            case 'no_isallowtalk':
                $condition['is_allowtalk'] = '0';
                break;
            case 'no_memberstate':
                $condition['member_state'] = '0';
                break;
        }
        //会员等级
        $search_grade = intval($_GET['search_grade']);
        if ($search_grade >= 0 && $member_grade){
            $condition['member_exppoints'] = array(array('egt',$member_grade[$search_grade]['exppoints']),array('lt',$member_grade[$search_grade+1]['exppoints']),'and');
        }
        //排序
        $order = trim($_GET['search_sort']);
        if (empty($order)) {
            $order = 'member_id desc';
        }
        
        if (!is_numeric($_GET['curpage'])){
            $count = $model->where($condition)->count();
            $array = array();
            if ($count > self::EXPORT_SIZE ){    //显示下载链接
                $page = ceil($count/self::EXPORT_SIZE);
                for ($i=1;$i<=$page;$i++){
                    $limit1 = ($i-1)*self::EXPORT_SIZE + 1;
                    $limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
                    $array[$i] = $limit1.' ~ '.$limit2 ;
                }
                Tpl::output('list',$array);
                Tpl::output('murl','index.php?act=member&op=member');
                Tpl::showpage('export.excel');
            }else{    //如果数量小,直接下载
                $data = $model->where($condition)->order('member_id desc')->limit(self::EXPORT_SIZE)->select();
                $this->createExcel($data);
            }
        }else{    //下载
            $limit1 = ($_GET['curpage']-1) * self::EXPORT_SIZE;
            $limit2 = self::EXPORT_SIZE;
            $data = $model->where($condition)->order('member_id desc')->limit("{$limit1},{$limit2}")->select();
            $this->createExcel($data);
        }
    }
    
     
    private function createExcel($data = array()){
        Language::read('export');
        import('libraries.excel');
        $excel_obj = new Excel();
        $excel_data = array();
        //设置样式
        
        $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1'))); 
        //header
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'会员');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'真实姓名');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'登录次数');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'最后登录时间');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'最后登录ip');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'积分');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'可用预存款');
        $excel_data[0][] = array('styleid'=>'s_title','data'=>'冻结预存款'); 
         
        foreach ((array)$data as $k=>$v){
            $tmp = array();
            $tmp[] = array('data'=>$v['member_name']);
            $tmp[] = array('data'=>$v['member_truename']);
            $tmp[] = array('data'=>$v['member_login_num']);
            $tmp[] = array('data'=>empty($v['member_login_time'])?"":date('Y-m-d H:i:s',$v['member_login_time'])); 
            $tmp[] = array('data'=>$v['member_login_ip']); 
            $tmp[] = array('data'=>$v['member_points']);
            $tmp[] = array('data'=>'可用'.$v['available_predeposit']);
            $tmp[] = array('data'=>"冻结".$v['freeze_predeposit']); 
            $excel_data[] = $tmp;
        }
        

       //设置每列宽度

        $excel_obj->setWidth(1,100);
        $excel_obj->setWidth(2,100);
        $excel_obj->setWidth(3,100);
        $excel_obj->setWidth(4,140);
        $excel_obj->setWidth(5,100);
        $excel_obj->setWidth(6,100);
        $excel_obj->setWidth(7,100);
        $excel_obj->setWidth(8,100);
        
        $excel_data = $excel_obj->charset($excel_data,CHARSET);
        $excel_obj->addArray($excel_data);
        $excel_obj->addWorksheet($excel_obj->charset('会员信息',CHARSET));
        $excel_obj->generateXML($excel_obj->charset('会员信息',CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
    }



行吧 就这样吧  大概就是 xml  被 excel 识别了

SHOPNC所有分类代码简化版

eBestMall 发表了文章 • 0 个评论 • 209 次浏览 • 2018-08-23 17:13 • 来自相关话题

 echo '<div class="menu">'; 
    echo '<h2 class="allcatetit"><a href="'.urlShop('category', 'index').'"><i></i>'.$lang['nc_all_goods_class'].'</a></h2>';
    echo '<ul class="menulist">';    
    $i = 0;
    foreach ($output['show_goods_class'] as $key => $val) { 
    $i++;         
    echo '<li>';
    //一级分类
    echo '<dl class="menu-dl">';
    echo '<dt><a href="'.urlShop('search','index',array('cate_id'=> $val['gc_id'])).'">'.$val['gc_name'].'</a></dt>';
    echo '<dd style="height:25px; overflow:hidden;">';
    foreach ($val['class3'] as $k => $v){          
        echo '<a href="'.urlShop('search','index',array('cate_id'=> $v['gc_id'])).'" title="'.$v['gc_name'].'">'.$v['gc_name'].'</a>';            
    }
    echo '</dd>';
    echo '</dl>';
    
    //隐藏类
    echo '<div class="menusonlist" style="display:none">';
    foreach ($val['class2'] as $k => $v) {
    echo '<dl>';
    echo '<dt><a href="'.urlShop('search','index',array('cate_id'=> $v['gc_id'])).'">'.$v['gc_name'].'</a></dt>';
    echo '<dd>';  
    foreach ($v['class3'] as $k3 => $v3) { 
        echo '<a href="'.urlShop('search','index',array('cate_id'=> $v3['gc_id'])).'">'.$v3['gc_name'].'</a>';
    }  
    echo '</dd>';               
    echo '</dl>';
    }            
    echo '</div>';
    
    echo '</li>';       
    }    
    echo '</ul>';
    echo '</div>';

样式JS自己写一下 查看全部

 echo '<div class="menu">'; 
    echo '<h2 class="allcatetit"><a href="'.urlShop('category', 'index').'"><i></i>'.$lang['nc_all_goods_class'].'</a></h2>';
    echo '<ul class="menulist">';    
    $i = 0;
    foreach ($output['show_goods_class'] as $key => $val) { 
    $i++;         
    echo '<li>';
    //一级分类
    echo '<dl class="menu-dl">';
    echo '<dt><a href="'.urlShop('search','index',array('cate_id'=> $val['gc_id'])).'">'.$val['gc_name'].'</a></dt>';
    echo '<dd style="height:25px; overflow:hidden;">';
    foreach ($val['class3'] as $k => $v){          
        echo '<a href="'.urlShop('search','index',array('cate_id'=> $v['gc_id'])).'" title="'.$v['gc_name'].'">'.$v['gc_name'].'</a>';            
    }
    echo '</dd>';
    echo '</dl>';
    
    //隐藏类
    echo '<div class="menusonlist" style="display:none">';
    foreach ($val['class2'] as $k => $v) {
    echo '<dl>';
    echo '<dt><a href="'.urlShop('search','index',array('cate_id'=> $v['gc_id'])).'">'.$v['gc_name'].'</a></dt>';
    echo '<dd>';  
    foreach ($v['class3'] as $k3 => $v3) { 
        echo '<a href="'.urlShop('search','index',array('cate_id'=> $v3['gc_id'])).'">'.$v3['gc_name'].'</a>';
    }  
    echo '</dd>';               
    echo '</dl>';
    }            
    echo '</div>';
    
    echo '</li>';       
    }    
    echo '</ul>';
    echo '</div>';

样式JS自己写一下

shopnc 手机端添加自定义模块

eBestMall 发表了文章 • 0 个评论 • 156 次浏览 • 2018-08-23 17:13 • 来自相关话题

(以商品模版为例)

第一步:添加个模版数据

新增模名称版为goodsnew

cccshop/data/model/mb_special.model.php

  /**

  * 获取专题模块类型列表

  * @return array

  *

  */

  public function getMbSpecialModuleList() {

  $module_list = array();

  $module_list[‘adv_list’] = array(‘name’ => ‘adv_list’ , ‘desc’ => ‘广告条版块’);

  $module_list[‘home1’] = array(‘name’ => ‘home1’ , ‘desc’ => ‘模型版块布局A’);

  $module_list[‘home2’] = array(‘name’ => ‘home2’ , ‘desc’ => ‘模型版块布局B’);

  $module_list[‘home3’] = array(‘name’ => ‘home3’ , ‘desc’ => ‘模型版块布局C’);

  $module_list[‘home4’] = array(‘name’ => ‘home4’ , ‘desc’ => ‘模型版块布局D’);

  $module_list[‘home5’] = array(‘name’ => ‘home5’ , ‘desc’ => ‘模型版块布局E’);

  $module_list[‘goods’] = array(‘name’ => ‘goods’ , ‘desc’ => ‘商品版块’);

  $module_list[‘goodsnew’] = array(‘name’ => ‘goodsnew’ , ‘desc’ => ‘商品版块new’);

              // 33hao.com v3-10

  if(!$_GET[‘special_id’]) {

                $module_list[‘goods1’] = array(‘name’ => ‘goods1’ , ‘desc’ => ‘限时商品’);

                            $module_list[‘goods2’] = array(‘name’ => ‘goods2’ , ‘desc’ => ‘团购商品’);

              }

  return $module_list;

  }

第二步: 左侧列表模版css修改(因为是根据名称调用css 必须新加样式才能显示,直接复制一个改个名称就行了,图片是继承的背景 根据需要另外设计背景图片)

cccshop/admin/templates/defalut/css/skin_0.css

.mb-special-layout .module-list .module_goods{……}

第三步:添加右侧模版文件

模块布局模板文件 mb_special_item.module_goodsnew.php

复制下面文件代码粘贴进新建模版

cccshop/admin/templates/defalut/mb_special_item.module_goods.php

第四步:添加查询数据(第三步之后会因没有新模版的相关数据而报错)

mb_special.model.php类文件中_initMbSpecialItemData方法中if 条件加上新增的模版名称

第五步:修改后台页面展示样式

5.1修改新增模版文件调用的class 名称

模板文件24行

<div class=”index_block goods-listnew”>

  <?php if($item_edit_flag) { ?>

  <h3>商品版块</h3>

  <?php } ?>

  <div class=”title”>

  <?php if($item_edit_flag) { ?>

5.2修改css文件

/* 商品块模型-编辑*/ 有两处 第一处是首页显示效果 第二处是编辑页显示效果

第六步:启用前台显示(后台一定要启用)

手机端首页

wap/index.html

复制修改id

<script type=”text/html” id=”goodsnew”>

              <div class=”index_block goods”>

              <% if (title) { %>

                            <div class=”title”><%= title %></div>

              <% } %>

                            <div class=”content”>

                            <% for (var i in item) { %>

                                          <div class=”goods-item”>

                                                        <a href=”tmpl/product_detail.html?goods_id=<%= item[i].goods_id %>”>

                                                                      <div class=”goods-item-pic”><img src=”<%= item[i].goods_image %>” alt=””></div>

                                                                      <div class=”goods-item-name”><%= item[i].goods_name %></div>

                                                                      <div class=”goods-item-price”>¥<%= item[i].goods_promotion_price %></div>

                                                        </a>

                                          </div>

                            <% } %>

                            </div>

              </div>

</script>

修改完成 不显示效果是路径错误(检查是否404) 配置文件 /wap/js/config.js 2个变量 ApiUrl 和AdnroidSiteUrl

图片显示是因为没有查询数据

第七步查询查询数据

data/model/mb_special.model.php中方法_formatMbSpecialData

case 加上新增的模板名称和动作

 case ‘goodsnew’:

  $new_item = array();

  foreach ((array) $item_data[‘item’] as $value) {

  $value[‘goods_image’] = cthumb($value[‘goods_image’]);

  $new_item[] = $value;

  }

  $item_data[‘item’] = $new_item;

  break;

第八步:修改手机前端样式文件

样式文件

wap/css/index.css

.home5 .content { font-size: 0; background-color: #FFF; *word-spacing: -1px/*IE6、7*/;}

.home5 .item { letter-spacing: normal; vertical-align: top; display: inline-block; *display: inline/*IE7*/;

width: 23%; margin: 1%; *zoom:1/*IE7*/;} 查看全部
(以商品模版为例)

第一步:添加个模版数据

新增模名称版为goodsnew

cccshop/data/model/mb_special.model.php

  /**

  * 获取专题模块类型列表

  * @return array

  *

  */

  public function getMbSpecialModuleList() {

  $module_list = array();

  $module_list[‘adv_list’] = array(‘name’ => ‘adv_list’ , ‘desc’ => ‘广告条版块’);

  $module_list[‘home1’] = array(‘name’ => ‘home1’ , ‘desc’ => ‘模型版块布局A’);

  $module_list[‘home2’] = array(‘name’ => ‘home2’ , ‘desc’ => ‘模型版块布局B’);

  $module_list[‘home3’] = array(‘name’ => ‘home3’ , ‘desc’ => ‘模型版块布局C’);

  $module_list[‘home4’] = array(‘name’ => ‘home4’ , ‘desc’ => ‘模型版块布局D’);

  $module_list[‘home5’] = array(‘name’ => ‘home5’ , ‘desc’ => ‘模型版块布局E’);

  $module_list[‘goods’] = array(‘name’ => ‘goods’ , ‘desc’ => ‘商品版块’);

  $module_list[‘goodsnew’] = array(‘name’ => ‘goodsnew’ , ‘desc’ => ‘商品版块new’);

              // 33hao.com v3-10

  if(!$_GET[‘special_id’]) {

                $module_list[‘goods1’] = array(‘name’ => ‘goods1’ , ‘desc’ => ‘限时商品’);

                            $module_list[‘goods2’] = array(‘name’ => ‘goods2’ , ‘desc’ => ‘团购商品’);

              }

  return $module_list;

  }

第二步: 左侧列表模版css修改(因为是根据名称调用css 必须新加样式才能显示,直接复制一个改个名称就行了,图片是继承的背景 根据需要另外设计背景图片)

cccshop/admin/templates/defalut/css/skin_0.css

.mb-special-layout .module-list .module_goods{……}

第三步:添加右侧模版文件

模块布局模板文件 mb_special_item.module_goodsnew.php

复制下面文件代码粘贴进新建模版

cccshop/admin/templates/defalut/mb_special_item.module_goods.php

第四步:添加查询数据(第三步之后会因没有新模版的相关数据而报错)

mb_special.model.php类文件中_initMbSpecialItemData方法中if 条件加上新增的模版名称

第五步:修改后台页面展示样式

5.1修改新增模版文件调用的class 名称

模板文件24行

<div class=”index_block goods-listnew”>

  <?php if($item_edit_flag) { ?>

  <h3>商品版块</h3>

  <?php } ?>

  <div class=”title”>

  <?php if($item_edit_flag) { ?>

5.2修改css文件

/* 商品块模型-编辑*/ 有两处 第一处是首页显示效果 第二处是编辑页显示效果

第六步:启用前台显示(后台一定要启用)

手机端首页

wap/index.html

复制修改id

<script type=”text/html” id=”goodsnew”>

              <div class=”index_block goods”>

              <% if (title) { %>

                            <div class=”title”><%= title %></div>

              <% } %>

                            <div class=”content”>

                            <% for (var i in item) { %>

                                          <div class=”goods-item”>

                                                        <a href=”tmpl/product_detail.html?goods_id=<%= item[i].goods_id %>”>

                                                                      <div class=”goods-item-pic”><img src=”<%= item[i].goods_image %>” alt=””></div>

                                                                      <div class=”goods-item-name”><%= item[i].goods_name %></div>

                                                                      <div class=”goods-item-price”>¥<%= item[i].goods_promotion_price %></div>

                                                        </a>

                                          </div>

                            <% } %>

                            </div>

              </div>

</script>

修改完成 不显示效果是路径错误(检查是否404) 配置文件 /wap/js/config.js 2个变量 ApiUrl 和AdnroidSiteUrl

图片显示是因为没有查询数据

第七步查询查询数据

data/model/mb_special.model.php中方法_formatMbSpecialData

case 加上新增的模板名称和动作

 case ‘goodsnew’:

  $new_item = array();

  foreach ((array) $item_data[‘item’] as $value) {

  $value[‘goods_image’] = cthumb($value[‘goods_image’]);

  $new_item[] = $value;

  }

  $item_data[‘item’] = $new_item;

  break;

第八步:修改手机前端样式文件

样式文件

wap/css/index.css

.home5 .content { font-size: 0; background-color: #FFF; *word-spacing: -1px/*IE6、7*/;}

.home5 .item { letter-spacing: normal; vertical-align: top; display: inline-block; *display: inline/*IE7*/;

width: 23%; margin: 1%; *zoom:1/*IE7*/;}

shopnc定时任务

eBestMall 发表了文章 • 0 个评论 • 129 次浏览 • 2018-08-23 17:12 • 来自相关话题

B2B2C商城 Linux下定时任务设置示例,商城系统功能非常庞大,众从的任务不可能都即时完成,这样会对系统造成极大负担,跟据系统业务的权重,将不同级别的业务放入不同的任务计划中,定时完成。

crontab -e
# B2B2C商城 Linux下定时任务设置示例
# php安装路径 /usr/local/php
# 商城安装路径 /wwwroot
 
# 执行频率:10分钟,[更新商品促销状态、首页商品信息、邮件通知等]
*/10 * * * * /usr/local/php/bin/php /wwwroot/crontab/index.php minutes
# 执行频率:1小时,[更新全文索引]
0 */1 * * * /usr/local/php/bin/php /wwwroot/crontab/index.php hour
# 执行频率:1天,[订单超期自动处理、售后超时处理、代金券虚拟码等过期提醒、更新统计等]
0 3 * * * /usr/local/php/bin/php /wwwroot/crontab/index.php date
# 执行频率:1个月,[生成结算]
0 4 1 * * /usr/local/php/bin/php /wwwroot/crontab/index.php month 查看全部
B2B2C商城 Linux下定时任务设置示例,商城系统功能非常庞大,众从的任务不可能都即时完成,这样会对系统造成极大负担,跟据系统业务的权重,将不同级别的业务放入不同的任务计划中,定时完成。

crontab -e
# B2B2C商城 Linux下定时任务设置示例
# php安装路径 /usr/local/php
# 商城安装路径 /wwwroot
 
# 执行频率:10分钟,[更新商品促销状态、首页商品信息、邮件通知等]
*/10 * * * * /usr/local/php/bin/php /wwwroot/crontab/index.php minutes
# 执行频率:1小时,[更新全文索引]
0 */1 * * * /usr/local/php/bin/php /wwwroot/crontab/index.php hour
# 执行频率:1天,[订单超期自动处理、售后超时处理、代金券虚拟码等过期提醒、更新统计等]
0 3 * * * /usr/local/php/bin/php /wwwroot/crontab/index.php date
# 执行频率:1个月,[生成结算]
0 4 1 * * /usr/local/php/bin/php /wwwroot/crontab/index.php month

shopnc nodejs安装

eBestMall 发表了文章 • 0 个评论 • 112 次浏览 • 2018-08-23 17:11 • 来自相关话题

从官网(http://nodejs.org/download/)下载二进制包(也可以下载源码包编译安装)。

# wget http://nodejs.org/dist/v0.10.2 ... ar.gz
# tar zxf node-v0.10.28-linux-x64.tar.gz
# mv node-v0.10.28-linux-x64 /usr/local/node
# mkdir wwwroot/node
1
2
3
4
将安装包内im 目录下的所有内容(不含im 目录本身)复制到/wwwroot/node/下, 
然后编辑/wwwroot/node/config.js 文件,配置示例如下:

var config = {};//数据库帐号设置
config['host'] = '10.10.10.50';//数据库地址
config['port'] = '3306';//数据库端口
config['user'] = 'shopnc';//数据库用户名
config['password'] = 'xxxxxx';//数据库密码
config['database'] = 'shopnc';//mysql 数据库名
config['tablepre'] = 'shopnc_';//表前缀
config['insecureAuth'] = true;//兼容低版本
config['debug'] = false;//默认false
exports.hostname = '';//授权连接的域名或IP,为空不限制
exports.port = 8090;//服务器所用端口号,默认8090,也可自定义
exports.config = config;
启动node 进程查看配置是否正确:
/usr/local/node/bin/node /wwwroot/node/chat.js

如果出现以下内容说明配置

info - socket.io started
mysql connected
1
2
然后停止当前node [ Ctrl + C ],将node 添加到系统服务器并随机启动。

# cd /wwwroot/node
# ln -s /usr/local/node/bin/node /usr/local/bin/node
# ln -s /usr/local/node/bin/npm /usr/local/bin/npm
# npm install -g pm2
# pm2 start /data/www/node/chat.js
# pm2 dump
# pm2 startup centos # [platform] = ubuntu, centos, redhat, gentoo, systemd, darwin, amazon
# chmod +x /etc/init.d/pm2-init.sh
# chkconfig --add pm2-init.sh

nodejs 控制命令:

# service pm2-init.sh {start|stop|status|restart|reload} 查看全部
从官网(http://nodejs.org/download/)下载二进制包(也可以下载源码包编译安装)。

# wget http://nodejs.org/dist/v0.10.2 ... ar.gz
# tar zxf node-v0.10.28-linux-x64.tar.gz
# mv node-v0.10.28-linux-x64 /usr/local/node
# mkdir wwwroot/node
1
2
3
4
将安装包内im 目录下的所有内容(不含im 目录本身)复制到/wwwroot/node/下, 
然后编辑/wwwroot/node/config.js 文件,配置示例如下:

var config = {};//数据库帐号设置
config['host'] = '10.10.10.50';//数据库地址
config['port'] = '3306';//数据库端口
config['user'] = 'shopnc';//数据库用户名
config['password'] = 'xxxxxx';//数据库密码
config['database'] = 'shopnc';//mysql 数据库名
config['tablepre'] = 'shopnc_';//表前缀
config['insecureAuth'] = true;//兼容低版本
config['debug'] = false;//默认false
exports.hostname = '';//授权连接的域名或IP,为空不限制
exports.port = 8090;//服务器所用端口号,默认8090,也可自定义
exports.config = config;
启动node 进程查看配置是否正确:
/usr/local/node/bin/node /wwwroot/node/chat.js

如果出现以下内容说明配置

info - socket.io started
mysql connected
1
2
然后停止当前node [ Ctrl + C ],将node 添加到系统服务器并随机启动。

# cd /wwwroot/node
# ln -s /usr/local/node/bin/node /usr/local/bin/node
# ln -s /usr/local/node/bin/npm /usr/local/bin/npm
# npm install -g pm2
# pm2 start /data/www/node/chat.js
# pm2 dump
# pm2 startup centos # [platform] = ubuntu, centos, redhat, gentoo, systemd, darwin, amazon
# chmod +x /etc/init.d/pm2-init.sh
# chkconfig --add pm2-init.sh

nodejs 控制命令:

# service pm2-init.sh {start|stop|status|restart|reload}

shopnc点击加入购物车流程

eBestMall 发表了文章 • 0 个评论 • 60 次浏览 • 2018-08-23 17:10 • 来自相关话题

点击加入购物车  127.0.0.1/shop/index.php?act=goods&goods_id=158 调用当前页面的buy js函数 ajax请求 添加到shopnc_cart表
function buy(type)
{
var B = false;
$('ul[nctyle="ul_sign"]').each(function(){
if(!$(this).find('a').hasClass('hovered')){
       B = true;
}
});
    if (goodsspec.getSpec() == null || B)
    {
        alert('请选择相关规格');
        return;
    }
    var spec_id = goodsspec.getSpec().id;
    var quantity = parseInt($("#quantity").val());
    if (!quantity>=1)
    {
        alert("请填写购买数量");
        $("#quantity").val('1');
        return;
    }
    max = parseInt($('[nctype="goods_stock"]').text());
    if(quantity > max){
    alert("您购买的商品数量,超出了该商品库存,请您重新选择商品数量");
    return;
    }
    switch(type) {
    case 'groupbuy' :
        buynow(spec_id,quantity,"groupbuy");
        break;
    case 'buynow':
        buynow(spec_id,quantity,'buynow');
        break;
    default:
        add_to_cart(spec_id, quantity);
        break;
    }
} 查看全部
点击加入购物车  127.0.0.1/shop/index.php?act=goods&goods_id=158 调用当前页面的buy js函数 ajax请求 添加到shopnc_cart表
function buy(type)
{
var B = false;
$('ul[nctyle="ul_sign"]').each(function(){
if(!$(this).find('a').hasClass('hovered')){
       B = true;
}
});
    if (goodsspec.getSpec() == null || B)
    {
        alert('请选择相关规格');
        return;
    }
    var spec_id = goodsspec.getSpec().id;
    var quantity = parseInt($("#quantity").val());
    if (!quantity>=1)
    {
        alert("请填写购买数量");
        $("#quantity").val('1');
        return;
    }
    max = parseInt($('[nctype="goods_stock"]').text());
    if(quantity > max){
    alert("您购买的商品数量,超出了该商品库存,请您重新选择商品数量");
    return;
    }
    switch(type) {
    case 'groupbuy' :
        buynow(spec_id,quantity,"groupbuy");
        break;
    case 'buynow':
        buynow(spec_id,quantity,'buynow');
        break;
    default:
        add_to_cart(spec_id, quantity);
        break;
    }
}