我正在考虑设计一个在我的网站上使用的成就系统的最佳方法.数据库结构可以在最佳方式找到,告诉3个或更多连续记录缺失,这个线程实际上是从开发人员那里获得想法的扩展.
我在这个网站上有很多关于徽章/成就系统的讨论就是这个问题 - 这都是谈话而不是代码.实际的代码实现示例在哪里?
我在这里提出一个设计,我希望人们可以做出贡献,并希望为编码可扩展的成就系统创建一个好的设计.我不是说这是最好的,远非它,但它是一个可能的起点.
请随时提出您的想法.
我的系统设计理念
似乎普遍的共识是创建一个"基于事件的系统" - 每当一个已知事件发生时,如创建,删除等帖子,它就像这样调用事件类.
$event->trigger('POST_CREATED', array('id' => 8));
Run Code Online (Sandbox Code Playgroud)
然后事件类找出哪些徽章正在"监听"此事件,然后查找requires
该文件,并创建该类的实例,如下所示:
require '/badges/' . $file;
$badge = new $class;
Run Code Online (Sandbox Code Playgroud)
然后它调用默认事件传递调用时收到的数据trigger
;
$badge->default_event($data);
Run Code Online (Sandbox Code Playgroud)
徽章
这就是真正的魔法发生的地方.每个徽章都有自己的查询/逻辑,以确定是否应颁发徽章.每个徽章都以例如以下格式列出:
class Badge_Name extends Badge
{
const _BADGE_500 = 'POST_500';
const _BADGE_300 = 'POST_300';
const _BADGE_100 = 'POST_100';
function get_user_post_count()
{
$escaped_user_id = mysql_real_escape_string($this->user_id);
$r = mysql_query("SELECT COUNT(*) FROM posts
WHERE userid='$escaped_user_id'");
if ($row = mysql_fetch_row($r))
{
return $row[0];
}
return 0;
}
function default_event($data)
{ …
Run Code Online (Sandbox Code Playgroud) 如果在函数中创建元素,如:
function makeDomElement()
{
var createdElement = document.createElement('textarea');
}
Run Code Online (Sandbox Code Playgroud)
并且你不会在DOM中的任何地方附加它,即通过.appendChild函数,它是否仍然保留在内存中?所以你必须这样做
function makeDomElement()
{
var createdElement = document.createElement('textarea');
delete createdElement;
}
Run Code Online (Sandbox Code Playgroud)
我只是好奇 :)
如何在Codeigniter中构建以下页面?
我想为每个部分创建单独的控制器
排除内容部分(因为此更改取决于左侧导航栏和内容导航栏中用作有点子菜单的链接).所有其他部分保持大致相同
我想过:
Class User_Profile extends Controller
{
function index()
{
$this->load_controller('Left_Nav');
$this->load_controller('Content_Nav');
$this->load_controller('Login_Name');
$this->load_controller('Leaderboard', 'Board');
$this->Left_Nav->index(array('highlight_selected_page' => 'blah'));
$this->load('User');
$content_data = $this->User->get_profile_details();
$this->view->load('content', $content_data);
$this->Login_Name->index();
$this->Board->index();
}
}
Run Code Online (Sandbox Code Playgroud)
显然这load_controller
不存在,但这种功能将是有用的.每个部分的控制器从模型中获取所需的数据,然后加载页面$this->view->load()
在新闻,用户,关于我们等所有左侧导航链接中使用此代码可能会令人头疼.但是,然后再次并非每个导航链接都包含所有这些部分,因此我需要将这些部分作为"部分"的灵活性视图"
谁能建议更好的方法呢?
请仔细阅读本声明:在将任何元素添加到$ dom中的document
所有不安全元素之前,我们假设已删除.但他们最初创建.好的,让我们继续....
如果处理了一段用户文本并且可以像这样加载:
var comment = 'I\'m a naughty person!!' +
'<script src="http://blah.com/some_naughty_javascript.js">';
var $dom = $('<div>' + comment + '</div>');
Run Code Online (Sandbox Code Playgroud)
这本身有危险吗?我的观点是,只是创建一个DOM的简单行为以某种方式注入任何东西,或者只是简单地处理并创建结构?
例如:
var $dom = $('<script>alert("hi");</script>');
Run Code Online (Sandbox Code Playgroud)
显然,消息hi不会弹出,直到它被添加到document
.但:
因此,如下面的答案中所述,似乎这种方法不是很安全,特别是出于一个原因:
var $dom = $('<img src="blah.jpg"/>')
- 无论对象是否已添加到文档中,这都将立即请求图像.这会产生处理HTML ajax请求的主要问题.例如,如果我们想从表单的输入中获取值:
$.ajax({
url: 'test.php',
success: function(responseHTML) {
var inputs = $(responseHTML).find('form input');
}
});
Run Code Online (Sandbox Code Playgroud)
这将不自觉地导致浏览器请求所有图像.
赏金奖励给任何人:
$(responseHTML).find('img')
- 用正则表达式删除图像标签不是一个选项,所以需要一种不显眼的方式来阻止src加载,但仍然有相同的属性,结构等我正在尝试向jQuery UI滑块小部件添加多个句柄,如在一个滑块中的2个或3个或更多范围滑块中.
我试过在谷歌搜索并找到一篇文章,展示如何修改它有多个句柄,但我需要它们作为范围滑块.
反正有没有让这项工作?
$("#slider-range").slider({
range: true,
min: 0,
max: 1439,
values: [540, 1020],
animate: true,
slide: slideTime
});
Run Code Online (Sandbox Code Playgroud)
谢谢
我偶然发现了jQuery.fly() - flyweight模式性能基准测试,在查看了测试代码和插件代码本身(也见下文)之后,我无法弄清楚它有什么用处?我搜索过互联网,找不到有关插件本身的任何有用信息.
它是一种更有效的循环/迭代数组而不是使用$(this)
in的方法.each
吗?
使用jQuery对象迭代
Run Code Online (Sandbox Code Playgroud)a.each(function() { $(this); });
使用jQuery.fly()迭代
Run Code Online (Sandbox Code Playgroud)a.each(function() { $.fly(this); });
(function($) {
var fly = $(),
push = Array.prototype.push;
$.fly = function(elem) {
var len = fly.length,
i;
if ($.isArray(elem)) {
fly.length = 0;
i = push.apply(fly, elem);
} else {
if (elem instanceof $) {
return elem;
}
if (typeof elem == "string") {
throw "use …
Run Code Online (Sandbox Code Playgroud) 在jQuery中将CSS属性从一个元素扩展/继承到另一个元素的最有效方法是什么?
$('#blah').extendCSSTo('#me') // Is there a plugin or a good way to do this?
$('#me').css({ background: 'blue' });
Run Code Online (Sandbox Code Playgroud)
#me
现在将拥有所有的CSS #blah
和background
CSS:
#blah {
padding: 5px;
width: 200px;
height: 20px;
border: 1px solid #333;
font-family: "Verdana";
}
#me {
position: absolute;
left: 5px;
top: 5px;
}
<div id="blah"></div>
<div id="me">test</div>
Run Code Online (Sandbox Code Playgroud)
编辑:这将在插件中使用,所以使用类,只是做.addClass
不是一个选项
我正在寻找与设置插件选项的默认值相同的效果,而是寻找CSS:
$.extend([css object], [#blah css object], [#me css object])
Run Code Online (Sandbox Code Playgroud) 以下面的场景为例:
.gitignore
前git add
A - B - C - D - E
| | | |
| \ | /
| commits that accidentally track application config
|
commit to untrack & .gitignore config
[finally you did the right thing... but too late?]
Run Code Online (Sandbox Code Playgroud)
如果你曾经重置或挑选回C,D或E,它将覆盖配置文件.
无论如何通过对它们应用B提交来重写C - E吗?
我已经阅读了一段时间的MVC设计,看来正式的View调用Model中的对象和方法,构建并输出一个视图.
我认为这主要是错误的.
Controller应该在模型中操作和检索/更新对象,选择适当的视图并将信息传递给它以便它可以显示.只有粗略和简单的PHP变量/简单的if语句才会出现在View中.
如果View获取了它需要从Model中显示的信息,那么View中肯定会有很多PHP - 完全违反了分离表示逻辑的要点.
这是textarea.(IPv4,Domain)
96.17.109.65 fox.com
Run Code Online (Sandbox Code Playgroud)
我想将IP值改为另一个.像这样,
74.125.71.106 fox.com
Run Code Online (Sandbox Code Playgroud)
我猜它会是这样的
$('textarea').find('some regular expressions..').val('another one...');
Run Code Online (Sandbox Code Playgroud)
请帮我.我只是想学习正则表达式..谢谢.
javascript ×6
jquery ×5
php ×3
html ×2
codeigniter ×1
css ×1
database ×1
dom ×1
git ×1
jquery-ui ×1
mysql ×1
performance ×1
regex ×1
security ×1