• DEDEEIMS疑难问题备忘录

    post by 黄牌网络 / 2012-9-13 21:19 Thursday

    1、后台的使用中,自定义变量的调用。

    示例文件如:后台根-content_list.php

    如在227行:

    if($channelid==27){
    $lgoclctit='<a href="content_list.php?channelid=6&cid=167&lgoclf2=';
    $lgoclctit1='">查看管理方案下产品</a>';
    }else{
    $lgoclctit='';
    $lgoclctit1='';

    }
    这样定的一个判断模块ID调用管理的代码。自定义变量lgoclctit

    到模板页面:content_list.htm

    这样调用

    {dede:global.lgoclctit/}{dede:field.id/}{dede:global.lgoclctit1/}&nbsp;&nbsp;<a href="javascript:editArc({dede:field.id/})">编辑</a> | <a href="javascript:viewArc({dede:field.id/})">预览</a>

    就可以调出一个判断模块调用一个链接的变量。强大。

    2、在模板页用使用RUNPHP操作数据库里的内容。

     以下是一个在文档详细页,通过一个模板值,操作数据库的示例,如果用户是中级会员,就可以显示出下载链接,否则就显示一个对话框提示。

     {dede:field name='t1' runphp='yes'}
     $lgocl1=@me;
     $id=$_COOKIE['DedeUserID'];
     $sql = "select rank From chuang_member where mid=$id";
     $query = mysql_query($sql);
     $row=mysql_fetch_array($query);
     $relID = "$row[rank]";
     if($relID==50){
    @me=$lgocl1;
     }else{
    @me="如需完整手册,请<a href='/houtaidengluxitong/denglu/index.html'>登录</a>下载!<br />
    <div style='width:450px; margin-left:105px;' class='yh_xiazai'><span>附件下载</span><img onclick='javascript:lgocl_show();' src='/templets/blue/images/down.gif' alt='立即下载' border='0' /></div>";
     }
     {/dede:field}

     <script type="text/javascript">
      function lgocl_show(){
      alert('您未登录或者未通过管理员审核!请登录后再试!');
      }
     </script>

    3、同一个文件扩展模板

    如在/plus/view.php,定义一个dw的变量

    $dw = (isset($dw) && is_numeric($dw)) ? $dw : 0;
    if($dw){
      //print_r($dw);
      $arc->display_lgocl();
    }else{
    $arc->Display();
    }

    在/include/arc.archives.class.php

    要复制几个函数,要么就直接拷贝改好的这个文件.在里面设置一个调用模板文件article_product_dw.htm

    扩展一个模板为article_product_dw.htm的变量调用

    通过:/plus/view.php?aid=123&dw=1实现访问;

    记得不是很清楚了,应该可以实现效果了.

    4、扩展副栏目也如此简单

    后台根目录模板文件product_add.htm

    <tr>
                  <td>&nbsp;所属解决方案</td>
                  <td>              <span id='typeidct_lgocl'>
           <?php
              echo "<select name='lang' style='width:130px' onchange='LoadSonType_lgoclid(this, $channelid);document.form1.f1.value=this.options[this.selectedIndex].value;'>\r\n<option value='152'>请选择解决方案分类</option>";
              $dsql->Execute('m',  "Select id,typename,lang From #@__arctype where reid=243 order by sortrank asc ");
              $dfcat = '';
              while($rw = $dsql->GetArray('m'))
              {
                  if($dfcat=='') $dfcat = $rw['id'];
                  echo "<option value='{$rw['id']}'>{$rw['typename']}</option>\n";
              }
              echo "</select>";
                ?>
                </span>
                <span id='sontypeid_lgocl'>
                    <?php
                    //print_r($dfcat."|".$cuserLogin->getUserChannel()."|".$channelid."|");
                    //echo $dfcat."|".$cuserLogin->getUserChannel()."|".$channelid;
                $typeOptions = GetOption_lgoclid_List($dfcat, $cuserLogin->getUserChannel(), $channelid, 0,0);
                echo "<select name='lgocl_typeid' onchange='(document.form1.f2.value=this.options[this.selectedIndex].value);'>\r\n";
                echo "<option value='256'>请选择该分类下的具体方案</option>\r\n";
                echo $typeOptions;
                echo "</select>";
                  ?>

                </span></td>
                </tr>

    所属解决方案,这里调到的243数据是总的要调的大栏目,256是243大栏目下的第一个小栏目。

     接下来要在模块里建立两个字段名称为:f1和f1的字段,用来放置这两个下拉产生的数值。

    在根目录下JS/main.js建立函数

    function LoadSonType_lgoclid(toptype, cid)
    {
        var selobj = $Obj('sontypeid_lgocl');
        var topid = toptype.options[toptype.selectedIndex].value;
        selobj.innerHTML = 'Loading...';
        var myajax = new DedeAjax(selobj);
        myajax.SendGet2("catalog_do.php?dopost=GetSunList_lgoclid&tid="+topid+"&cid="+cid);
        DedeXHTTP = null;
    }

    在catalog_do.php文件里接收GetSunList_lgoclid值

    else if($dopost=="GetSunList_lgoclid")
    {
        require_once(DEDEADMIN."/inc/inc_catalog_options.php");
        AjaxHead();
        $typeOptions = GetOption_lgoclid_List($tid, $cuserLogin->getUserChannel(), $cid, 0);
      echo "<select name='lgocl_typeid' onchange='(document.form1.f2.value=this.options[this.selectedIndex].value)'>\r\n";
      echo "<option value='152'>请选择所属解决方案分类</optio>";
      echo $typeOptions;
      echo "</select>";
    }

    注意下拉名称和表单对象名称。

    在inc下的inc_catalog_options.php文件里,需要扩展一个函数:

    GetOption_lgoclid_List

    这里呵呵要保密了,不再写出来了。

    5、一个很复杂的在详细页查找两个表,调用查询数据并放按条放进CSS里的示例。强大啊。

     {dede:field name='id' runphp='yes'}
                $tempid=@me;
                if(!isset($dsql) || !is_object($dsql)){
                   $dsql = new DedeSql(false);
                }
    $sql = "select a.title,a.id,a.litpic From chuang_archives a left outer join chuang_addonproduct b on b.aid=a.id where b.f2=$tempid";            $dsql->SetQuery($sql);
                $dsql->Execute();
                @me="";
                $m=1;
                while($row = $dsql->GetArray()){
                    @me.="<div class=\"cnm1\"><div class=\"cnm2\"><a target=\"_blank\" href=/plus/view.php?aid=".$row['id']."><img src=\"".$row['litpic']."\" class=\"img12091401\" /></a></div><div class=\"cnm3\"><a target=\"_blank\" href=/plus/view.php?aid=".$row['id'].">".$row['title']."</a>";
                    @me.="</div></div>";
                    $m++;
                }

            {/dede:field}

    6、后台设置后,整站登不上。出错信息为:

    点击查看原图
    这个大概是操作了系统后台的栏目处的设置默认语言或系统设置里有符合不规范。

    比如:$cfg_df_lang = 'gb2312';这个变量为空了。

    修复看文件:data/config.cache.inc.php文件。看看出错变量是不是值为空了。

    如果后台进去后一片空白,那么这时要开启DEDE的错误提示。文件是:

    找到:include/common.inc.php文件,打开,查找程序代码:
    //error_reporting(E_ALL);
    error_reporting(E_ALL || ~E_NOTICE); 
    替换为:
    error_reporting(E_ALL); 
    //error_reporting(E_ALL || ~E_NOTICE);
    这一步很重要,因为它会告诉你为什么变成空白的提示信息,保存之后再次进入管理后台,这个时候会发现后台会有一句话提示了
    7、DEDESQL少了“global $dsql”本地可以用,线上不可用。
    <div class="zskc3"> {dede:arclist typeid='75' row='6' channelid='31'  addfields='sj,body' flag='c'   }
              <div class="zskc4">
                <div class="zskc44">
                  <dl>
                    <dd><img src="[field:litpic/]" width="73" height="73" /></dd>
                    <dt>
                      <p class="jiacu">[field:title/]</p>
    				  <p>[field:typeid runphp='yes']
    				 
    				  	$sql='Select * from lgocl_arctype where reid in(select reid from lgocl_arctype where id='.@me.') limit 0,4';
    						global $dsql;					
    					if(!is_object($dsql))
    						{
    							$dsql = new DedeSql();
    						}
    					 $dsql->Execute('me'.@me,$sql);
    					$me='me'.@me;
    					$si=1;
    					@me='';
    					 while($row = $dsql->GetObject($me)){
    					 $url=str_replace("{cmspath}/","/",$row->typedir);
    					 //@me="lgocl";
    					 @me.= "<p><a href='".$url."' target='_blank'>".$row->typename."</a></p>";
    					$si++;
    					 if($si>3) break;
    					 }
    					[/field:typeid]
    				  </p>
                   
                    </dt>
                  </dl>
                </div>
                <div class="zskc444">
                  <ul>
                    <li><a href="javascript:void()" onclick="onlinurl()"><img src="/templets/default/images/ico3.jpg" /></a></li>
                    <li> <a href="[field:typeurl/]#ab[field:typeid/]" target="_blank" title="[field:typename /]">查看详细课程>></a></li>
                  </ul>
                </div>
              </div>
              {/dede:arclist} </div>
    以上代码里的红色声明那少了,在线上的一些空间就调不出数据,会成空白。
    7、发现DEDE搜索很慢时,这样设置:
     1、配置sphinx服务器。
      后台 -> 系统 -> 系统基本参数 -> 其它选项 -> “Sphinx服务器主机地址:”、“Sphinx服务器端口号:”。
      2、关闭全文检索功能。
      后台 -> 系统 -> 系统基本参数 -> 其它选项 -> “是否启用文章全文检索功能(需配置sphinx服务器):” -> 否。 
    设置后记得更新一下后台的缓存,否则搜索时会出现404页面。
    8、针对网站安全,在原来装了数据之后再改表前缀,会出现很多文章系统的删除等无效,原因就是因为模块安装表dede_channeltyp里,针对模块的相应表项内容没有改过来。
    9、修改当前位置的语言。如原来是:
    
    ENGLISH > Product > CERAMIC HEATER > 
    Home > Product > CERAMIC HEATER > 
    其实很简单,修改后台-常用操作-网站栏目管理-最大的语言分类栏目-更改- 语种类型,修改这里的名字就可以了。如果改不了。就直接找数据库里改表chuang_arctype里的相关栏目的 	
    typename。
    10、DEDE图片集上传图片时出错显示(FILEID)的解决办法,很简单,一定是UTF8的版本出问题了。把后台的文件转为UTF8格式即可。
    11、详细页调同类产品:
    {dede:sql sql="SELECT *
    FROM chuang_archives a
    LEFT OUTER JOIN chuang_addonproduct25 c ON c.aid = a.id
    WHERE a.typeid =~typeid~
    AND a.id <> ~id~ LIMIT 0 , 2 "}
    		    <dd class="dd_rec">
                <div><a href="/plus/view.php?aid=[field:id/]"><img src="[field:litpic/]" width="125" height="130" /></a></div>
                <div>[field:title/][field:id/]</div>
                <div>[ [field:p1 /] ]</div>
              </dd>
    		   {/dede:sql} 
    用SQL循环,很好用。上面这句查询了两个表。
    10、最新究竟出来的一写法:
    {dede:php}
    $row = $dsql->GetOne('SELECT title FROM chuang_archives WHERE id ='.$lgoclid.' LIMIT 0 , 1');
    print_r($row['title']);
    {/dede:php}
    比SQL标签更好,可以在SQL中带自定义的变量。

    评论:

    aming
    2013-04-13 15:59
    接下来在列表标签调用时的代码:
    [field:uid runphp="yes"]  
    $dsql = new DedeSql(false);  
    $a="select * from m_user where uid=@me";  
    $arcRow = $dsql->GetOne($a);  
    $url=$arcRow[m_url];  
    $fei=$arcRow[m_fei];  
    $uid=$arcRow[uid];  
    if($fei==1&&$url!="") {@me=$url;}  
    else{@me= "/vipmember.php?uid=".$uid;};  
      
    [/field:uid]