Category Archives: 软件技术

wordpress左侧根据主菜单,自动显示子导航菜单栏目

22
11
根据后台设置的导航菜单
获取当前菜单的子菜单,若果没有子菜单,则返回到父级菜单,显示左侧导航。
参考http://www.webfinder.cn/archives/163.html
返回的是数组,在函数中对数组进行了处理。
对一些不在导航菜单中显示分类进行了单独处理。
目前只处理了一级下拉菜单的情况。有需要的可以进行完善。
一篇文章有多个分类情况$queried_object_id有时候会出现并不是预期的值。希望高手指教。
只需要在分类页面对应位置写上
[php]<?php echo get_sub_menu(); ?>[/php]
对应的格式可以修改下面的代码。
[php]
function get_sub_menu($menu_name=’primary’,$num=’0′){

global $wp_query;
//获取当前页面分类信息
$cat = get_the_category(); $cat = $cat[0];
$queried_object_id = (int) $wp_query->queried_object_id;

$locations = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locations[ $menu_name ] );

$menuitems = wp_get_nav_menu_items( $menu->term_id, array( ‘order’ => ‘DESC’ ) );
$parent_id=false;
$home_page_id = $home_page_id = (int) get_option( ‘page_for_posts’ );
//单页面$queried_object_id匹配为当前分类的ID
if(is_single()){
$queried_object_id=$cat->cat_ID;
}

foreach ($menuitems as $item){

if ($item->object_id==$queried_object_id && (
‘taxonomy’ == $item->type || ‘post_type’ == $item->type || ‘custom’ == $item->type
)) {
//此处只判断一级下拉菜单的情况
if($item->menu_item_parent==0 ){
$parent_id = $item->ID;
break;
}else{
$parent_id = $item->menu_item_parent;
break;
}
}
}

if ($parent_id!==false) {
foreach ($menuitems as $item){

if ($item->menu_item_parent==$parent_id) {
$sub_menu[]=(array)$item;
}
if (!empty($sub_menu)&&$item->ID==$parent_id) {
$output .='<div class="lsmainlf1">
<div class="lsmainlf1top">’;
$output .= $item->title.'</div>
</div>
<div class="lsmainlf2">
<ul>’;
}
}
}else{
$sub_menu = ”;
}

if(!empty($sub_menu)){
foreach ($menuitems as $item){

if ($item->ID==$parent_id) {
$output .='<div class="lsmainlf1">
<div class="lsmainlf1top">’;
$output .= $item->title.'</div>
</div>
<div class="lsmainlf2">
<ul>’;
}
}

foreach ($sub_menu as $k=>$v){
if ($v[‘menu_item_parent’]==0) {
$output .='<div class="lsmainlf1">
<div class="lsmainlf1top">’;
$output .= $v[‘title’].'</div>
</div>
<div class="lsmainlf2">
<ul>’;
}else{
$output .= ‘<li><a href="’.$v[‘url’].’"’;
if($v[‘object_id’]==$queried_object_id){ $output .= ‘ class="cur"’;}
$output .= ‘>’.$v[‘title’].'</a></li>’;
}
}
$output .= ‘</ul>
</div>
<div class="lsmainlf3"></div>’;
}elseif($cat->cat_name){
$cat_ID=$cat->cat_ID;
$output .='<div class="lsmainlf1">
<div class="lsmainlf1top">’;
$output .= $cat->cat_name.'</div>
</div>
<div class="lsmainlf2">
<ul>’;

$output .= ‘<li><a href="’.get_category_link( $cat_ID).’"’;
$output .= ‘ class="cur"’;
$output .= ‘>’.$cat->cat_name.'</a></li>’;
$output .= ‘</ul>
</div>
<div class="lsmainlf3"></div>’;

}else{

$output .='<div class="lsmainlf1">
<div class="lsmainlf1top">’;
$output .= get_the_title().'</div>
</div>
<div class="lsmainlf2">
<ul>’;

$output .= ‘<li><a href="’.get_category_link( $cat_ID).’"’;
$output .= ‘ class="cur"’;
$output .= ‘>’.get_the_title().'</a></li>’;
$output .= ‘</ul>
</div>
<div class="lsmainlf3"></div>’;
}
return $output;
}
[/php]

wordpress通过自定义栏目排序,不添加,也可以正常显示

在主题的functions.php中添加以下代码
_li_love_count为自定义的字段名称

function lovesort($query)
{ $query->set('meta_query', array(
'relation' => 'OR',
array( //check to see if _li_love_count has been filled out
'key' => '_li_love_count',
'compare' => '=',
'value' => int
),
array( //if no _li_love_count has been added show these posts too
'key' => '_li_love_count',
'value' => int,
'compare' => 'NOT EXISTS'
)
) );
$query->set('meta_key' , '_li_love_count');
$query->set('orderby' , 'meta_value_num');
$query->set('order' , 'desc');
}
add_filter('pre_get_posts' , 'lovesort');

wordpress 火车头自动发布时下载图片并设置为缩略图

是在原来的火车头自动发布的基础上进行增加了下缩略图的下载并添加,采集的时候并不需要下载图片。
//引用系统文件
require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');
//通过url下载远程图片
$image = media_sideload_image($post_img, $postID, $post_title);

magento 1.8 安装出错 Failed to initialize storage module解决方法

放假前看到magento更新到1.8版本,就匆匆安装看看,结果竟然给我个报错。使用的是xampp1.6.7版本,因为和服务器上的环境一样,如下:

Fatal error: session_start() [<a href=’function.session-start’>function.session-start</a>]: Failed to initialize storage module: user (path: D:\xampp\tmp) inD:\xampp\htdocs\magento18\app\code\core\Mage\Core\Model\Session\Abstract\Varien.php on line 125

google了下,说是要更改tmp文件夹属性为可写,可以win7系统好像不太好更改文件夹属性,这个也不知道啥原因。

之后用xampp 1.8版本安装后没有出现问题。但是放到服务器上仍然有问题。按照网上的说法,更改保存路径也没用。

 

 

之后发现注释掉\app\code\core\Mage\Core\Model\Session\Abstract\Varien.php中的

[box_light]session_module_name($moduleName);[/box_light]

这句话,就不会出现问题。不知道会不会有其他影响,有更好的解决方法,欢迎大家留言

 

 

添加isolate和maxassoc后的效果

openwrt web管理luci界面修改

以前都没听过openwrt和luci,只接触过简单的php语言。由于工作原因,要修改下luci的界面,竟然用了我2天的时间才简单的了解了luci的用法。这里简单的和大家分享下。(就接触2天,本人又是菜鸟级别,高手直接略过吧)大家发现有什么错误就和我说下大家共同学习。我主要是想修改下open后台jiem

具体怎么安装已经有人介绍过来了,我就不详细说了。下面说配置好之后,修改UI的做法

在浏览器中输入:http://192.168.1.1/   会自动跳到http://192.168.1.1/cgi-bin/luci   登陆默认root 密码是空

默认的几个一级菜单都是在modules\admin-full\luasrc\controller\admin\ 这个目录下

这个就类似于php的根目录了。/etc/config/这个目录下面的文件,个人观点是可以把它当做是php中的数据库连看待,这样反而更方便理解。

实际上luci界面提供的已经很全了,我们并没有多少必要要新建立页面,我们大多就是在已有的界面上添加一些内容。比如我们公司现在需要添加wifi的isolate和maxassoc这两项属性。就让我找了半天才找到

首先要找到network-wifi对应的文件,

在找点击edit后页面对应的文件。

openwrt luci wifi edit

network.lua这个文件里面就定义了network下面有哪些二级目录。

比如我要改wifi,我就看到有

if has_wifi and has_wifi.size > 0 then page = entry({“admin”, “network”, “wireless”}, arcombine(template(“admin_network/wifi_overview”), cbi(“admin_network/wifi”)), _(“Wifi”), 15) page.leaf = true page.subindex = true

这里面有cbi(“admin_network/wifi”)这条语句。知道的人就知道,不知道也没关系,想知道可以自己查下。

这时我们到目录\modules\admin-full\luasrc\model\cbi\admin_network\下面可以发现一个wifi.lua的文件,cbi的语句就是指向的这个文件。我们打开wifi.lua后,在———————- Interface ———————–这个下面地方添加

isolate = s:taboption(“advanced”, Flag, “isolate”, translate(“Separate Clients”),translate(“Prevents client-to-client communication”))

maxassoc = s:taboption(“advanced”, Value, “maxassoc”, translate(“Connection Limi”),translate(“Specifies the maximum number of clients to connect.”))

 

这样两条语句就可以了。进入network-wifi   edit看下我们修改的效果

我们进入network-wifi之后选择一个无线网络点击edit后进入页面

添加isolate和maxassoc后的效果

在Interface Configuration下面的Advanced Settings下面可以进行修改之后点击Save & Apply

修改这两项是保存在什么地方呢?刚刚我说了,/etc/config/目录下相当于数据库的功能。

这时我们vi /etc/config/wireless可以查看到我们刚刚修改内容。

可以看到已经修改为我们刚刚调整的77了。

有的人想要添加新的页面和功能,可以看下下面的内容。

下面内容来源于chaochaoblog

要完成一个新模块并用到里面需要两个东西,

第一个我们先找到usr/lib/lua/LuCI/controller在里面建立一个文件夹,也就是我们的模块名称,就叫smustar吧

在smustar下面再写我们模块的主文件就叫smumodule.lua吧

参考官网,我们的模块写法应该是这样子的

module(“LuCI.controller.smustar.smumodule”, package.seeall)

function index()
entry({“admin”, “network”, “802.1x“}, cbi(“smustar-smumodule/netifaces”), “Network interfaces”, 30).dependent=false
end

第一句话是声明一下这个模块了,没什么可说的。

第二句话就是我们模块的主函数,其中呢要告诉它我们的入口,与其说入口,不如说就是告诉它是要admin登录才能用的,是在network这个菜单下,名字呢,叫做802.1x。模块执行的程序呢在smustar-smumodule/netifaces这里。

好了各位又郁闷了smustar-smumodule/netifaces是什么东西,这是我们要建立的另外一个文件,上面不是说要两个么

我们找到路径/usr/lib/lua/LuCI/module

在下面建立文件夹smustar-smmodule建立文件netfaces.lua

好了接下来就是要在netfaces.lua写我们的程序了,参考官网所说的这个什么LuCI最酷的地方,也就是修改config文件

不要说你不懂什么是config文件了,最简单的比如network。

我们在/etc/config下面建立一个配置文件叫smuset吧

那这就是一个config文件的写法

config  ‘interface’  ‘smustar’

option ‘user’ ‘youruser’
option ‘pass’ ‘yourpass’

ok这个config文件就是这样子了接下来写netfaces.lua

m = Map(“smuset”, “smustar”) — We want to edit the uci config file /etc/config/smustar 这里是我们要配置的文件了,默认的路径它已经能够区别的,不用管了
s = m:section(TypedSection, “interface”, “smustar”) — Especially the “interface”-sections读出里面的interface区域来
s.addremove = true — Allow the user to create and remove the interfaces

s:option(Value, “user”, “youruser”)这个能就是一个input即一个输入框了读取的是smuset中的user项。youruser是提示语罗

key=s:option(Value, “pass”, “your password”)

key.password=true; 设置为星号的密码输入框

return m — Returns the map
好了文件就完成了,之后我们进入LuCI配置界面

在network下可以看到了802.1x选项

进入后有账号和密码输入框 改一下之后

save&apply一下,发现密码被修改了。我们的802.1x配置界面就做好了!

欢迎大家留言指教

因当时工作原因接触luci,现在已经不再从事相关工作,好久不接触,已经都忘记了,没有办法帮助到大家,抱歉!