小编Fra*_*tti的帖子

如何使用angular.js推送通知?

我一直在构建一个简单的应用程序来学习angular.js.到目前为止,我连接了MEAN堆栈中的所有部分,我能够从Mongo中保存和检索数据.

该应用程序本质上是一个待办事项列表.用户可以创建一个项目,在项目内部创建带有"todos"的"卡片",然后可以从一个状态移动到另一个状态("积压","正在进行","完成"等)

我希望能够将通知推送给所有连接的人,告诉他们的应用程序需要刷新才能获得最新的待办事项.换句话说,假设用户A向项目A添加了一张新卡,我想向正在观看项目A的所有用户发送消息,以便他们的应用程序发出项目刷新以获得最新和最好的.

有关如何进行的任何建议?我需要将哪种技术添加到MEAN堆栈才能执行此类操作?

提前致谢

javascript mongodb push-notification angularjs mean-stack

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

如何根据某些参数加载不同的RESX文件

我有一个ASP.NET3.5(C#)ASPX页面,它以10种不同的语言进行国际化.

该页面结构非常复杂,有几十个由状态机模式驱动的嵌套视图.

编辑:我meta:resourcekey在每个asp控件中使用语法,允许使用隐式资源表达式的声明性语法.

我被要求根据一些查询字符串参数"标记"页面.品牌化不仅意味着加载不同的CSS文件,还意味着具有不同的文本模糊(在所有语言中).

是否有一种简单的方法来"交换"resx文件,而无需为此页面上的每个数百个文字和图像手动获取资源?

换句话说,假设我有以下RESX文件:

brand1_myPage.aspx.en-US.resx
brand1_myPage.aspx.de-DE.resx
brand1_myPage.aspx.fr-FR.resx

brand2_myPage.aspx.en-US.resx
brand2_myPage.aspx.de-DE.resx
brand2_myPage.aspx.fr-FR.resx
Run Code Online (Sandbox Code Playgroud)

myPage.aspx将查找名为myPage.xx-XX.resx的 resx文件.

有没有办法加载brand1xxx.resx文件或brand2xxx.resx基于某些值?

提前致谢.

.net c# asp.net resx internationalization

15
推荐指数
1
解决办法
5333
查看次数

Kentico中的多对多关系

是否有关于如何构建基于多对多关系的Kentico CMS门户实施的最佳实践(即销售食品并且有大部分食谱的网站 - 每种产品都用于许多食谱,每个食谱可以使用网站上销售的许多产品)?

Kentico是否只是错误的工具,或者Kentico中是否有解决方案来处理这种关系?

c# many-to-many content-management-system kentico

10
推荐指数
1
解决办法
2404
查看次数

如何在angular.js中处理多个异步任务?

在沙盒应用程序上工作以学习angular.js我在代码中的几个地方遇到了以下模式.我发现自己不得不在循环中查询mongoDB.据我了解,每次调用都发生在自己的异步任务中.我如何知道所有任务何时完成?

例如,我有一系列状态.通常我需要为每个状态将someProperty设置为someNewValue.一旦所有状态都已更新,我想调用someFunction().

for (var i = 0; i < $scope.states.length; i++) {
    $scope.states[i].someProperty = someNewValue;
    $scope.states[i].$update({stateId: $scope.states[i].id}, function() {
        someFunction();
    });
}
Run Code Online (Sandbox Code Playgroud)

现在,我能想到这样做的唯一方法是每次更新成功时调用someFunction().我知道必须有一个更聪明,更好的方法.

你的方法是什么?

javascript asynchronous callback mongodb angularjs

10
推荐指数
1
解决办法
5141
查看次数

使用Service Locator反模式和使用Castle Windsor容器有什么区别?"

最近,我一直试图了解使用Service Locator"反模式"和使用Castle Windsor容器之间的区别.我在互联网上找到了一些信息,我总结了迄今为止在未完成的博客文章中学到的内容.

编辑:到目前为止,我一直认为依赖注入是保证分离所需要的.但在我看到的任何地方,我都看到了像温莎城堡这样的容器方向.我想清楚地了解原因.请... 向我解释这就像我是一个6岁的孩子 :)

oop castle-windsor inversion-of-control service-locator

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

Sitecore OMS - 内容层次结构的最佳实践

我继承了一个现有的Sitecore实现,该实现具有使用相同模板的大型内容文件夹.一些文件夹包含数百篇文章.不同类型的角色应该对不同的文件夹感兴趣.我不想逐篇文章为每个页面设置Personas和Profile属性.理想情况下,我只想为整个文章文件夹输入一次属性.在这种情况下,最佳做法是什么?

我应该为每种类型的文章创建不同的模板吗?或者有没有办法从内容树中的父项继承这些属性?

谢谢

编辑

我与Sitecore USA的首席技术官John West在线交谈.以下是他解决这个问题的建议.我想在这里分享它们,因为其他人可能有兴趣解决类似的问题.

我不知道任何现有的继承这些值的解决方案,但可能还有其他方法(可能类似于语言回退).

如果模板的数量相对较少,我可能会采用模板方法 - 将现有模板转换为所有现有项的模板的基本模板,并相应地更新插入选项.将这些东西放在文件夹中并不会有什么坏处,但它们不会以这种方式继承这些值(你可以实现一些如上所述继承它们的东西).这里的一个好处是您可以使用标准值更新这些详细信息,这些信息将适用于基于这些模板的所有项目.

另一种方法是实现布局和安全预设之类的东西,但是对于这些其他值.

无论您做什么,请确保当用户创建新项目时,他们可以每日应用这些属性,或者自动应用这些属性.

另一种方法是编写一个更新现有项目的脚本,但这对将来的项目没有帮助(除非您执行类似保存处理程序的操作以在创建时自动应用相同的值).也许从该父文件夹中复制值.

我喜欢在现有模板中添加一个布尔字段的想法,该模板控制该项是否应该从其直接父项复制配置文件值,然后在该字段设置为true时实现一个保存处理程序来执行复制.所以我问约翰是否有关于如何构建这样的处理程序的文档.这是他的回复:

这解释了您可以利用项目创建/更改来设置值的一些方法:

http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/11/Intercepting-Item-Updates-with-Sitecore.aspx

我假设你可以使用一个项目:保存的事件处理程序.我避免使用item:创建处理程序,因为如果我的逻辑出错,我希望它在下一个save事件中再次运行.在您的情况下,如果这些字段为空,您可能想要设置该值.

您可以使用工厂将参数传递给事件处理程序以避免硬编码.例如,您可以传递数据库名称master(如果保存的项目位于不同的数据库中,则中止处理程序)和受影响的模板ID列表.然后,您可以在以后更轻松地将模板添加到列表中.

http://www.sitecore.net/en/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2011/02/The-Sitecore-ASPNET-CMS-Configuration-Factory.aspx

以下是有关事件的一些信息:

http://sdn.sitecore.net/Articles/API/Using%20Events.aspx

这包括一个使用保存处理程序的示例:

http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/06/Sitecore-Shared-Source-NewsMover-Categorizes-News-by-Date.aspx

sitecore

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

如何限制Wordpress帖子中的分类值的数量?

我已经定义了一系列自定义帖子类型(即"PortfolioPage"和"PortfolioGallery").

他们每个人都使用一个名为"艺术家"的自定义分类法.

有没有办法限制最终用户在每个PortfolioPage/PortfolioGallery帖子中输入AT MOST ONE艺术家?

wordpress taxonomy custom-post-type

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

营销人员和DMS的Sitecore Web表单 - 不记录活动,目标和退出信息

在WFFM中有一个选项,以便当有人放弃表单时,表单中输入的任何数据都会被记录下来,并且可以通过Dropout Report访问.

我有一个WFFM,我已经开启了Analytics并打开了dropout功能.不幸的是,我没有看到数据库中记录的任何数据和Dropout报告是可见的,但是空的.

我从WFFM文件夹中包含的javascript代码中看到,一系列AJAX调用应该保存模糊事件的字段 - 调用/ sitecore modules/web/Web Forms for Marketers/Tracking.aspx

我尝试调试Javascript代码,但该方法应该将信息发布到/ sitecore modules/web/Web Forms for Marketers/Tracking.aspx永远不会被调用.你能想到这个代码不起作用的任何原因吗?此外,有谁知道这个信息应该记录在哪个表中?它是WFFM DB中的字段表吗?

最后,即使我已经在这个特定的WFFM表单上启用了分析,并且我已经将一个活动和一个目标与提交表单相关联,但这些都没有被记录下来.我看到表单中输入的数据已成功存储并显示在数据报告中,但没有关于广告系列和目标的信息记录在数据库中.

我甚至直接在运行的DMS DB中手动检查:

select top 10
p.DateTime, p.UrlText, cp.CampaignName
,i.Url, vi.VisitId
from pages p
inner join ItemUrls i on p.ItemId = i.ItemId
inner join Visits vi on vi.VisitId = p.VisitId
inner join GeoIps g on vi.Ip = g.Ip
left join Campaigns cp on cp.CampaignId = vi.CampaignId
order by p.DateTime desc
Run Code Online (Sandbox Code Playgroud)

这个显示正在命中呈现表单的页面,但没有与该访问关联的活动.

然后我尝试了以下内容:

select pe.datetime, ped.Name, pg.UrlText from PageEvents pe
inner join PageEventDefinitions …
Run Code Online (Sandbox Code Playgroud)

sitecore web-forms-for-marketers sitecore-dms

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

Sitecore页面编辑器和工作流程 - 如何?

假设我有一个经典的页面布局.

  • 带有徽标的标题(一个子布局)
  • 页面标题中的顶部导航(另一个子布局)
  • 一个3列的页面子布局,包括:
    • 左列导航子布局加载在左列占位符中
    • 中心列中的占位符,可以加载不同的内容项(幻灯片显示,选项卡容器,HTML块等)
    • 右列中的占位符可以加载不同的侧边栏内容项(在多个页面中共享)
  • 页脚子布局,也可能带有页脚导航子布局(例如联系我们,帮助,T&C等)

现在让我们说所有这些都可以在页面编辑器中进行编辑,让我们添加一个事实,即我希望所有内容都能通过工作流程.

当编辑进入特定页面(比如"关于我们"页面)时,当他点击编辑时,Sitecore究竟应该做什么?该页面上显示的所有项目是否会切换到DRAFT状态?或者只有当编辑器实际上编辑了页面上显示的某些"内容项"中的某些内容时才会发生这种情况?

当页面提交审批时会发生什么?修改后的所有子项是否也会进入"已提交审批"状态并出现在审批者/发布者的工作箱中?

如果没有开箱即用,怎么能实现这一切?有没有人已经解决了这个问题并成功解决了它?这似乎是一个常见的问题,但我似乎无法找到关于如何将这些联系起来的任何指导.

谢谢,FG

sitecore sitecore6 sitecore-workflow page-editor

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

如何在Neo4J中处理队列?

在我的Neo4J数据库中,我有一系列通过双链表实现的卡片队列.数据结构显示在下图中(使用Alistair Jones的Arrows在线工具生成的队列的SVG图):

队列

由于这些是队列,我总是从队列的TAIL添加新项目.我知道双关系(下一个/上一个)不是必需的,但它们简化了两个方向的遍历,所以我更喜欢它们.

插入新节点

这是我用来插入新"卡片"的查询:

MATCH (currentList:List)-[currentTailRel:TailCard]->(currentTail:Card) WHERE ID(currentList) = {{LIST_ID}}
CREATE (currentList)-[newTailRel:TailCard]->(newCard:Card { title: {{TITLE}}, description: {{DESCRIPTION}} })
CREATE (newCard)-[newPrevRel:PreviousCard]->(currentTail)
CREATE (currentTail)-[newNextRel:NextCard]->(newCard)
DELETE currentTailRel
WITH count(newCard) as countNewCard
WHERE countNewCard = 0
MATCH (emptyList:List)-[fakeTailRel:TailCard]->(emptyList), 
(emptyList)-[fakeHeadRel:HeadCard]->(emptyList) 
WHERE ID(emptyList) = {{LIST_ID}}
WITH emptyList, fakeTailRel, fakeHeadRel
CREATE (emptyList)-[:TailCard]->(newCard:Card { title: {{TITLE}}, description: {{DESCRIPTION}} })
CREATE (emptyList)-[:HeadCard]->(newCard)
DELETE fakeTailRel, fakeHeadRel
RETURN true
Run Code Online (Sandbox Code Playgroud)

查询可以分为两部分.在第一部分:

MATCH (currentList:List)-[currentTailRel:TailCard]->(currentTail:Card) WHERE ID(currentList) = {{LIST_ID}}
CREATE (currentList)-[newTailRel:TailCard]->(newCard:Card { title: {{TITLE}}, description: {{DESCRIPTION}} })
CREATE (newCard)-[newPrevRel:PreviousCard]->(currentTail)
CREATE (currentTail)-[newNextRel:NextCard]->(newCard) …
Run Code Online (Sandbox Code Playgroud)

queue neo4j cypher data-structures doubly-linked-list

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

Sitecore何时运行初始化管道?

我一直在偷看Sitecore.Kernel,但似乎无法找到Sitecore运行Initialize管道的地方.它是在每个页面请求上运行还是仅在应用程序启动时运行一次?你能指出我为这个管道调用Run方法的确切位置吗?

更新 有理由我最后问这个问题是因为我在Sitecore的代码中追溯mvc.requestBegin管道的执行.这是我发现的:

  • Initialize管道运行InitializeRoutes处理器...
  • Sitecore.Mvc.Pipelines.Loader.InitializeRoutes.Process(PipelineArgs args) 来电...
  • Sitecore.Mvc.Pipelines.Loader.InitializeRoutes.RegisterRoutes(RouteCollection routes, PipelineArgs args) 来电...
  • Sitecore.Mvc.Pipelines.Loader.InitializeRoutes.SetRouteHandlers(RouteCollection routes, PipelineArgs args)创建新RouteHandlerWrapper对象

这里的事情有点模糊......

  • Sitecore.Mvc.Routing.RouteHandlerWrapper.GetHttpHandler(RequestContext requestContext) 回报 (IHttpHandler) new RouteHttpHandler

最后......

  • Sitecore.Mvc.Routing.RouteHttpHandler.ProcessRequest(HttpContext context) 来电...
  • Sitecore.Mvc.Routing.RouteHttpHandler.BeginRequest()运行mvc.requestBegin管道

sitecore

3
推荐指数
1
解决办法
3459
查看次数

如何让C#异步方法实际并行运行?

我之前从未使用过async方法,但我发现自己构建了一个监视工具,并认为我可以使用这种方法来加快速度.

该工具定义了SiteConfigurations列表,每个SiteConfiguration都有一个要测试的监视器列表(通过HTTP请求).该工具的体系结构基于管道,例如:

  • 当监视器成功时,MonitorSuccessPipeline执行
  • 当监视器失败时,MonitorFailurePipeline执行
  • 当站点配置中的所有监视器都运行时,SiteAfterMonitorsPipeline执行
  • 当所有站点配置都已运行时,EndEnginePipeline执行

最初的方法是遍历所有,SiteConfigurations并为每个人运行所有相关的Monitors.

总执行时间:100个SiteConfigurations x 4监视器每个监视器x~1秒=运行约400秒.

所以我把我RunMonitor变成了async(实际的方法比你在这里看到的更多,这是方法的"核心"):

    private async Task<Result> RunMonitor(Monitor currentMonitor)
    {
        Result result = new Result();
        var client = new HttpClient();
        var response = client.GetAsync(currentMonitor.TestUrl);
        var content = await response.Result.Content.ReadAsStringAsync();
        bool containSuccessText = content.Contains(currentMonitor.SuccessText);
        bool isOk = status == HttpStatusCode.OK;
        result.Success = containSuccessText && isOk;

        if (result.Success)
        {
            ExecutePipeline("MonitorSuccessPipeline", currentMonitor); …
Run Code Online (Sandbox Code Playgroud)

c# async-await

0
推荐指数
1
解决办法
107
查看次数