织梦会员中心如何调用文章?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 织梦建站 正文

核心思路

无论使用哪种方法,核心思路都是一致的:

织梦会员中心调用文章
(图片来源网络,侵删)
  1. 确定调用对象:我们只需要调用当前登录会员发布的文章。
  2. 获取会员ID:织梦有一个全局变量 $_SESSION['mid'],它存储了当前登录会员的唯一ID,这是我们筛选文章的关键。
  3. 使用Dede标签:利用织梦的 {dede:arclist}{dede:list} 标签,并通过它们的属性来筛选出属于当前会员的文章。

使用 {dede:arclist} 标签(推荐,最灵活)

{dede:arclist} 是织梦最强大的列表调用标签,适合在会员中心首页、侧边栏等需要展示少量文章摘要的地方使用。

基础调用代码

将以下代码直接放在您会员中心模板文件(通常是 /member/templets/article_article.htm 或您自定义的模板文件)的相应位置即可。

{dede:arclist row='10' titlelen='30' orderby='pubdate'}
  <li>
    <a href="[field:arcurl/]">[field:title/]</a>
    <span class="time">[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
  </li>
{/dede:arclist}

关键:如何只显示当前会员的文章?

上面的代码会显示所有会员的最新文章,要只显示当前登录会员的文章,我们需要添加 channelidmemberid 属性。

channelid:

织梦会员中心调用文章
(图片来源网络,侵删)
  • channelid='1' 调用文章模型(默认)。
  • channelid='2' 调用图集模型。
  • ...以此类推,对于文章,通常写 1 或者直接不写(因为默认就是1)。

memberid:

  • 这是核心,我们需要将 memberid 的值设置为当前登录会员的ID,即 $_SESSION['mid']

完整且正确的代码示例

<h3>我的最新文章</h3>
<ul>
  {dede:arclist 
    row='10' len='30' 
    orderby='pubdate' 
    channelid='1' 
    memberid='%@me%'
  }
    <li>
      <a href="[field:arcurl/]" target="_blank">[field:title/]</a>
      <span class="time">发布于:[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
    </li>
  {/dede:arclist}
</ul>

代码解释:

  • row='10':显示10条记录,len='30'`:标题长度截取30个字符。
  • orderby='pubdate':按发布时间倒序排列。
  • channelid='1':指定调用文章模型。
  • memberid='%@me%':这是最关键的一步!%@me% 是织梦模板语法中的一个特殊用法,它会自动将其替换为当前标签所在环境下的PHP变量值,它会被替换为 $_SESSION['mid'],从而实现了只调用当前会员文章的功能。

高级用法:按栏目调用

如果会员的文章分了很多栏目,你可能想在会员中心分栏目展示,只需添加 typeid 属性即可。

<h3>我在“技术分享”栏目的文章</h3>
<ul>
  {dede:arclist 
    row='10' len='30' 
    orderby='pubdate' 
    channelid='1' 
    memberid='%@me%'
    typeid='5'  <!-- 假设栏目ID为5 -->
  }
    <li>
      <a href="[field:arcurl/]" target="_blank">[field:title/]</a>
    </li>
  {/dede:arclist}
</ul>

使用 {dede:list} 标签(适合分页列表)

{dede:list} 通常用于需要分页的列表页面,我的所有文章”列表,它和 {dede:arclist} 的主要区别在于,{dede:list} 是在服务器端分页,而 {dede:arclist} 是通过JS实现客户端分页(除非你用了 phpurl 等方式)。

模板文件修改

找到会员中心的文章列表页面模板,默认路径是 /member/templets/article_list.htm

在模板中,找到 {dede:list} 标签,并为其添加属性。

{dede:list pagesize='15' channelid='1' memberid='%@me%'}
  <li>
    <span class="t">[field:title/]</span>
    <span class="d">[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
    <span class="i"><a href="javascript:DelArc([id],0)">删除</a> | <a href="javascript:EditArc([id])">编辑</a></span>
  </li>
{/dede:list}

代码解释:

  • pagesize='15':设置每页显示15条文章。
  • channelid='1'memberid='%@me%':与方法一中的作用完全相同,用于筛选当前会员的文章。
  • [id]:这是文章的ID,用于删除和编辑等操作。

分页标签:

{dede:list} 标签之后,别忘了加上织梦的分页标签:

<div class="dede_pages">
  <ul class="pagelist">
    {dede:pagelist listsize='4' listitem='info,index,pre,next,end,pageno'}
    </ul>
</div>

使用SQL直接查询(最灵活,适合复杂需求)

如果你的需求非常复杂,比如需要调用文章的某个自定义字段,或者需要多表联查,那么直接写SQL语句是最好的选择。

模板文件修改

在需要调用列表的地方,使用 {dede:sql}

<h3>我的待审核文章</h3>
<ul>
  {dede:sql sql="SELECT * FROM `dede_archives` WHERE `arcrank` = -1 AND `mid` = '~@me~' ORDER BY `pubdate` DESC LIMIT 0, 10"}
    <li>
      <a href="[field:arcurl/]" target="_blank">[field:title/]</a>
      <span>状态:待审核</span>
    </li>
  {/dede:sql}
</ul>

代码解释:

  • sql="...":在这里写你的SQL查询语句。
  • dede_archives:织梦存放文章基本信息的核心表。
  • arcrank = -1:这是一个非常有用的字段。arcrank 的值代表文章状态:
    • 0:已审核,正常显示。
    • -1:待审核。
    • -2:回收站。
    • >0:自定义审核级别(需要配合审核流程)。
  • mid = '~@me~':与方法一中的 memberid='%@me%' 类似,~@me~ 也会被替换为 $_SESSION['mid']
  • LIMIT 0, 10:从第0条开始,取10条数据。

如何获取文章URL?

直接从 dede_archives 表里是拿不到文章URL的,你需要使用织梦的函数来生成,在 {dede:sql} 中,可以使用 [field:id function='GetOneArcUrl(@me)'/] 来获取文章链接。

修正后的SQL调用示例:

{dede:sql sql="SELECT * FROM `dede_archives` WHERE `mid` = '~@me~' ORDER BY `pubdate` DESC LIMIT 0, 10"}
  <li>
    <a href="[field:id function='GetOneArcUrl(@me)'/]" target="_blank">[field:title/]</a>
    <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
  </li>
{/dede:sql}

总结与注意事项

方法 适用场景 优点 缺点
方法一 {dede:arclist} 会员首页、侧边栏、调用少量文章 灵活,支持多种参数,性能较好 默认分页为JS分页,不适合大数据量列表
方法二 {dede:list} 需要分页的“我的文章”列表 服务器端分页,对SEO友好 灵活性不如 arclist
方法三 {dede:sql} 复杂查询、调用自定义字段 灵活性最高,可完全控制SQL 需要一定的SQL基础,有一定安全风险(注意防注入)

重要注意事项:

  1. 登录判断:确保这些代码只在用户登录后才可见,你可以在模板里用 {if $_SESSION['mid']}...{/if} 进行判断。
    {if $_SESSION['mid']}
      <!-- 这里放上你的调用代码 -->
    {else}
      <p>请先登录!</p>
    {/if}
  2. 模板缓存:修改会员中心模板后,如果看不到效果,请清空一下网站缓存(后台 -> 系统 -> 清除所有缓存)。
  3. 安全:使用 {dede:sql} 时,如果变量来自用户输入,务必做好过滤和防SQL注入处理,避免网站被攻击。

对于99%的场景,方法一方法二 已经足够强大和方便,希望这份详细的指南能帮助到你!

-- 展开阅读全文 --
头像
网站联系方式修改织梦
« 上一篇 03-07
C语言如何从字符串中提取数字?
下一篇 » 03-07

相关文章

取消
微信二维码
支付宝二维码