小编Bay*_*ock的帖子

php中的动态函数名称

我想在WordPress中简化"自定义帖子类型"的创建,因为通过相同的脚本并一遍又一遍地手动更改所有自定义帖子类型名称实例是很繁琐的.

通过创建包含CPT名称的变量并在需要的任何地方使用它来实现它非常简单.这样,我所要做的就是在脚本的开头声明变量,并且应该处理其余部分.

唯一的问题是,为了使它工作,我还需要在脚本内的每个函数前面加上CPT名称的前缀,似乎在PHP中使用函数名中的变量并不容易或甚至推荐.

那么我怎么能解决这个问题呢?

下面是一个示例:

$prefix = 'news';

function news_custom_type_init()
{
    global $prefix;

    register_post_type($prefix, array(
    'labels' => array(
          'name' => $prefix,
          'singular_label' => $prefix,
          'add_new' => 'Add',
          ...
        ));

        register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');
Run Code Online (Sandbox Code Playgroud)

这几乎是好的,如果我只能动态重命名函数,以便不必在它前面写"新闻"这个词,而是使用"$ prefix"代替,这可以标准化.

这可能是好的,但只是不起作用:

$prefix = 'news';

$functionName= $prefix."_custom_type_init";

function $functionName()
{
    global $prefix;

    register_post_type($prefix, array(
    'labels' => array(
          'name' => $prefix,
          'singular_label' => $prefix,
          'add_new' => 'Add',
          ...
        ));

        register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');
Run Code Online (Sandbox Code Playgroud)

必须手动命名函数有点击败我尝试的最初目的(特别是当脚本嵌入了这样的几十个函数时).

最好的方法是什么?

PS:我谷歌搜索和"stackoverflowed"很多关于此但没有找到任何适合我的需要的工作解决方案,并没有生成WordPress错误消息.

谢谢.

php wordpress function dynamic

9
推荐指数
2
解决办法
2万
查看次数

Php/Mysql联盟和限制偏移量

我有3个表具有完全相同的结构,我需要将它们作为一个大表查询,命令并限制这个大表作为一个整体.当我使用分页时,限制是一个偏移量.

这是我到目前为止:

$from = (($page_number-1)*10);
$to   =  ($page_number)*10;     

$request = mysql_query("
    (SELECT * FROM table_a) 
    UNION ALL 
    (SELECT * FROM table_b) 
    UNION ALL 
    (SELECT * FROM table_c) 
    ORDER BY title ASC 
    LIMIT ".$from.",".$to 
);

$z=0;

while ($result = mysql_fetch_array($request)) 
{
    ....
    $z++;
};

$counter = $z;
Run Code Online (Sandbox Code Playgroud)

我希望$ counter等于10,无论页面如何,但是:

在第1页,$ counter = 10

在第2页,$ counter = 20

在第3页,$ counter = 23

在第4页,$ counter = 3

好的,如果最后一页不一定等于10,因为我从列表中得到了什么,但是第2页和第3页得到20和23对我没有任何意义.

它必须与LIMIT相关,因为如果我只使用经典方式的单个表,我的计数器总是等于10(当然,除非它是最后一页).

这有什么不对?

谢谢!

mysql union counter request limit

7
推荐指数
1
解决办法
3069
查看次数

缩小时缩小CSS和模糊图片

当我用HTML和CSS将图片显示为原始大小时,图片就是完美的(当然).

如果我尝试以比原始尺寸大的尺寸显示它,但是如果最终尺寸更小则不会变得模糊.这就是发生的事情:我的照片在任何情况下都很模糊.

问题是网站和图片是响应式的,我不能为每种尺寸创建缩略图,但我仍然需要结果是脆的.至少不那么模糊.

我搜索了网络,发现了这个CSS:

image-rendering:-moz-crisp-edges;          /* Firefox        */
image-rendering:-o-crisp-edges;            /* Opera          */
image-rendering:-webkit-optimize-contrast; /* Safari         */
image-rendering:optimize-contrast;         /* CSS3 Proposed  */
image-rendering:crisp-edges;               /* CSS4 Proposed  */
image-rendering:pixelated;                 /* CSS4 Proposed  */
-ms-interpolation-mode:nearest-neighbor;   /* IE8+           */
Run Code Online (Sandbox Code Playgroud)

它有效,但它给了我完全相反的东西:它太脆了,图片上出现了伪影(点).我一起尝试了它们,但没有成功.这是全有或全无.

这就像你在Photoshop中拍摄了一张像样的照片并将锐度滑块推到了最大值.无论哪种方式,它太极端无法使用.

我使用php,jquery,html和css是否有使用其中一种解决我的渲染问题?

谢谢.

css image blurry scale

6
推荐指数
1
解决办法
3536
查看次数

Javascript:动态命名的全局变量

我有一个看起来像这样的全局变量:

var socket_x = 'whatever';
Run Code Online (Sandbox Code Playgroud)

问题是“x”将取决于用户会话。假设用户 ID 为 123,我希望全局变量为:

var socket_123 = 'whatever';
Run Code Online (Sandbox Code Playgroud)

这样,每个浏览的用户都会将自己的套接字设置为全局变量。

我只是不知道该怎么做。

我知道我可以使用:

eval('socket_' + userId)   = 'whatever'; //not recommended
window['socket_' + userId] = 'whatever'; //best
Run Code Online (Sandbox Code Playgroud)

但是如果我想像这样声明全局变量,它将不起作用:

var eval('socket_' + userId) = 'whatever';
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?

谢谢你。

PS:我知道不应该使用“eval”,但这只是为了说明。


编辑:

谢谢你们所有人的回答,但它不起作用。

到目前为止,这是我的全局变量(它可以正常工作,但我不想将 php 与 javascript 混合使用):

var socket_<?php echo $_SESSION['user_id'];?> = io.connect( 'http://pubsub.pubnub.com', pubnub_setup_private );
Run Code Online (Sandbox Code Playgroud)

如果我这样做,就像你建议的那样:

window['socket_'+actual_user_id]= io.connect( 'http://pubsub.pubnub.com', pubnub_setup_private );
Run Code Online (Sandbox Code Playgroud)

它只是行不通。

如果我将其作为局部变量来执行,它会起作用:

eval('socket_'+actual_user_id).emit( 'all', msg_all );
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,它不会:

window['socket_'+actual_user_id].emit( 'all', msg_all );
Run Code Online (Sandbox Code Playgroud)

所以我在这里遇到了两个问题:

  • window 从来不适合我,eval 可以。
  • eval 作为一个局部变量而不是一个全局变量。似乎需要“var”,但不接受在 eval 之前使用“var”。 …

javascript global-variables dynamic-data

5
推荐指数
1
解决办法
4903
查看次数

正则表达式:允许除一些选定字符之外的所有字符

我想验证一个textarea,我只是没有得到正则表达式(它花了我一天和一堆教程来弄明白).

基本上我希望能够允许一切(包括换行符和战车),但可能是恶意的角色(那些会导致安全漏洞的角色).由于很少有字符是不允许的,我认为创建黑名单比白名单更有意义.

我的问题是:正则表达式中的标准"除了"之外是什么?

我正在使用javascript和jquery.

我试过这个,但它不起作用(这很糟糕,我知道......):

var messageReg = /^[a-zA-Z0-9éèêëùüàâöïç\"\/\%\(\).'?!,@$#§-_ \n\r]+$/;
Run Code Online (Sandbox Code Playgroud)

谢谢.

javascript regex jquery textarea

5
推荐指数
3
解决办法
2万
查看次数

使用单个查询选择和删除

我有2张桌子:

  • 用户(user_id,user_connected)
  • rooms(room_id,room_initiating_user_id,room_target_user_id)

我想删除启动用户和target_user都设置为"user_connected = 0"的所有"房间"

我有两个问题:

  1. 如何定位这些用户?显然这个查询不起作用:

    SELECT room_id
    FROM rooms,users
    WHERE
    ( 
     (room_target_user_id=user_id) AND (user_connected=0)
    )                   
    AND
    (                
     (room_initiating_user_id=user_id) AND (user_connected=0)
    )
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我希望,如果可能,使用相同的查询删除这些房间(如果我使用第二个查询没问题,但这意味着将为每个结果触发此查询,这是很多.是不是可以删除这些房间一次?

mysql optimization select sql-delete

4
推荐指数
1
解决办法
2万
查看次数

PubNub最佳实践:如何管理私人房间?

我正在学习pubnub并且我阅读了他们的文档,但我找不到如何管理多房间聊天框.

默认情况下,任何人都可以收听频道.订阅它并在其上发布很容易.

我想要的是拥有一个主要的公共房间(到目前为止一直很好),但任何人都应该能够私下与其他人交谈而不会被其他用户阅读.

这些动态房间将被标记,用户应该能够从一个房间到另一个房间.

另一个要求是私下与某人交谈不会让你离开你订阅的其他房间(你仍然可以通知你在聊天时在另一个房间发布了一条新消息)

实现这一目标的最佳做法是什么?

  • 我会使用不同的频道(动态创建)吗?
  • 我会使用一个频道并根据他们的状态,伪房间ID或主角过滤消息吗?
  • 我会使用多路复用(仅限一个插槽)吗?

我需要知道实现这一目标的最佳方法,因为文档仅描述了单个房间的基本情景,而且在互联网上没有任何相关内容.

谢谢.

PS:我知道PubNub一次不建议超过2个频道(即使我很难找到解释).

PPS:我正在使用punbub和socket.io

private multiplexing socketchannel pubnub

2
推荐指数
2
解决办法
5393
查看次数

Ajax:发送formData和自定义变量

我正在尝试使用ajax上传图片.

如果我这样做,这是有效的:

    $("#adv_cover").change(function(e){

        e.preventDefault();

        var formData = new FormData($('#adv_form_cover')[0]);

        $.ajax({
            type: 'POST',
            url: 'edit.php',
            data: formData,
            processData: false,
            contentType: false,
            success: function(response) {}
         });
    });
Run Code Online (Sandbox Code Playgroud)

然后在PHP中我得到这样的数据:

if($_FILES["adv_cover"]["name"]) {}
Run Code Online (Sandbox Code Playgroud)

好.

但是现在,我也需要发送一个ID,所以根据我在这里发现的一些情况,我就是这样做的:

    $("#adv_cover").change(function(e){

        e.preventDefault();

        var formData = new FormData();
        formData.append('id', '1300');
        formData.append('adv_cover', $('#adv_form_cover')[0]);

        $.ajax({
            type: 'POST',
            url: 'edit.php',
            data: formData,
            processData: false,
            contentType: false,
            success: function(response) {}
         });
    });
Run Code Online (Sandbox Code Playgroud)

然后在PHP中我尝试获取这样的数据:

$id=$_POST['id'];
if($_FILES["adv_cover"]["name"]) {}
Run Code Online (Sandbox Code Playgroud)

但我现在什么都没有.

我也尝试了console.log formData ['id']和formData ['adv_cover'],没有成功,所以看起来问题至少是在javascript方面.

请注意,我也试过了两个:

formData.append('adv_cover', $('#adv_form_cover')[0]);
Run Code Online (Sandbox Code Playgroud)

formData.append('adv_cover[]', $('#adv_form_cover')[0]);
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

php ajax jquery form-data

1
推荐指数
1
解决办法
2万
查看次数