Drupal

Drupal开发人员和管理员的问答



2
消除折叠内容中的阻止渲染的JavaScript和CSS
我正在建立一个Drupal 7网站。这些是我使用的一些模块:自适应主题(主题),视图和内容窗格,面板,迷你面板,无处不在的面板,页面管理器,菜单的Superfish,Addthis,选择(下拉)。 为了提高网站性能以及处理CSS和JS文件,我使用了Advagg模块。 在运行Google的Pagespeed测试时,出现以下错误,提示为“ Should Fix”: 在首屏内容中消除渲染阻止JavaScript和CSS 您的页面有6个阻止脚本资源和8个阻止CSS资源。这会导致页面渲染延迟。如果不等待以下资源加载,则无法呈现页面上的首屏内容。尝试延迟或异步加载阻塞资源,或直接在HTML中内联这些资源的关键部分。 这是Google提供的信息: 删除阻止渲染的JavaScript 优化CSS交付 有什么办法可以更改Advagg模块或Drupal核心的设置并解决此问题? 还有另一种方法可以实现这个目标吗? 更新 -根据mikeytown2答案实施更改后,我在Google的Pagespeed测试中收到以下消息: 在首屏内容中消除渲染阻止JavaScript和CSS 您的页面有6个阻止脚本资源和4个阻止CSS资源。这会导致页面渲染延迟。 如果不等待以下资源加载,则无法呈现页面上的首屏内容。尝试延迟或异步加载阻塞资源,或直接在HTML中内联这些资源的关键部分。


5
hook_form_alter中“ und”的语言键的最佳实践
我正在自定义模块中以某种形式进行修改。代码如下: function my_module_form_alter(&$form, &$form_state, $form_id) { if ($form_id == "someID") { $form['field_charity_author']['und'][0]['value']['#value'] = arg(3); //$form['field_charity_author']['#type'] = 'hidden'; } } 但是,我认为硬编码und是不好的。在这种情况下,正确修改表单字段的正确方法应该是什么?
30 7  entities  hooks  i18n-l10n 

3
如何在Drupal中进行测试驱动开发(TDD)?
在Drupal中使用了TDD的哪些工具(PHP模块,Drupal模块等)? 您的提交/测试/部署工作流是什么样的?您是否使用Phing,PHPUnderControl,Hudson来管理此工作流程? 单元测试以哪种方式使您的代码更可靠? 您是否需要单独的,昂贵的,独立的单元测试服务器,还是可以从便携式计算机上完成? 我知道Robert 在这里写了一篇很棒的技术文章,内容涉及使用SimpleTest在Drupal中进行单元测试。我对涵盖工作流程和配置部分更感兴趣。目前,我有一个开发机器,暂存和生产服务器。生产站点和舞台站点均在300MB RAM / 300MHz CPU Dreamhost VPS上运行。
30 testing 

4
大型站点的节省内存的缓存清除策略?
我的Drupal 7站点中有一个拥有数千个字段,一堆内容类型,超过25个视图以及数百个(很快成千上万个)配置文件类型。因此,我正在使用一个更好地缓存实体字段信息的核心补丁(http://drupal.org/node/1040790),以及-dev版本的Views,它可以通过显示更好地缓存视图(而不是一个HUGE)视图缓存中包含所有视图数据的行)。 这已帮助站点上的大多数页面加载了20-30MB的已用RAM,而不是160MB +(不是为10MB +的字段和视图拉出cache_ *表行,这些补丁有助于使cache_ *数据保持更高的效率)。 但是,这带来了一个问题,即缓存重建需要很长时间。通常超过一两分钟。在这段时间内,Drupal根本不会加载任何页面(因为它尚未尝试读取的缓存尚未建立,因此其他请求必须等待)。 在低流量周期中,这没什么大不了的。一百个左右的用户只需等待一分钟,即可加载页面。但是在高流量周期中,Apache服务器开始发疯,CPU负载超过40,并且由于所有工作线程都处于等待状态并最大程度地占用了内存,从而导致交换,内存很快就装满了。这有点像死亡螺旋。重新启动httpd可以清除问题,但是恢复正常需要5到10分钟。 我的目标是做到这一点,以使缓存清除不会使站点瘫痪。首先,如果我使用admin_menu的单个缓存清除功能(例如“ CSS和JS”,然后是“菜单”,然后是“主题注册表”,等等),事情进展顺利,直到我点击了“ Page and else”选项。那是在重置视图的缓存时(一个非常占用CPU和数据库的操作,需要缓存视图的数量),并且在重置字段信息缓存时(在此站点上也是CPU和数据库的消耗)。 所以...我的问题/想法: 使用drush和/或其他shell脚本,是否有可能比“一次清理所有缓存并希望进行干净的重建”更加智能地清除缓存? 我可以在清除缓存时阻止HTTP请求,以使apache不会被一堆带有缓存标记的请求所阻塞吗? 如果我可以清除Drupal /正常httpd请求之外的缓存,则可以为缓存清除操作设置更高的PHP memory_limit,并退出我的通用memory_limit(现在设置为256MB,以防任何单个httpd线程需要清除缓存) ...)。 基本上:除了单击UI中的按钮或使用之外,是否有任何智能,优雅的方式使用Drupal清除所有缓存drush cc all? [ 编辑说明:我的主要问题是缓存重建,这(a)需要一段时间,并且(b)阻止所有其他请求,直到重建完成。我想找到一种方法来使它在高流量时不会那么致命。]
30 7  drush  caching  performance 

2
以编程方式使用Search API
问题:需要使用Search API以编程方式运行我自己的搜索。我发现的每个google结果都适合教给非开发人员如何将模块与Views一起使用,而没有按照我的意愿进行操作的结果。 信息: 使用本地数据库服务代替Solr或任何其他服务。 数据未存储在数据库中,将与其他结果一起显示。 内容将在“类型”选项卡中分组。 由于各种原因而不使用视图。 已启用Facets API,但也不知道如何使用它。 原因:因为我想让搜索页面位于/ site-search,并且在页面参数后没有/ node / keyword。还将要求自定义此功能,使其超出可能提供相同类型功能的其他模块的范围。而且我想学习如何执行此操作,但是还没有找到有关如何完成此操作的任何教程或其他见解。 剩下的:我已经创建了搜索页面,并在其上执行以下搜索: $term = $_SESSION['my-search']['term']; $server = search_api_server_load('database'); $index = search_api_index_load('default_node_index'); $query = new SearchApiQuery($index); $query->keys($term); $query->fields(array('title','body:value')); $srv= new SearchApiDbService($server); $result = $srv->search($query); 在提交搜索表单时设置会话变量,然后将用户重定向到/ site-search以执行搜索并显示结果。 如果我输出$ result,我会看到它是一个包含不同信息的数组,其中包括一个结果集,该结果集是节点ID及其分数的数组。 我可以遍历这些内容,抓取节点并自己显示结果,但我认为必须有其他方法来呈现搜索结果。我还没有找到,那就是问题所在。 我一直在搜索Search API和Facet API中的不同类,但在它们中找不到任何看起来像它们可以建立结果输出的东西。 任何帮助,将不胜感激。 结果示例: Array ( [result count] …
30 7  search 

7
如何让用户取消发布并发布自己的内容?
我想让用户取消发布并发布自己的内容。默认情况下,您必须授予“管理节点”权限,以便用户能够取消发布或发布内容。但这是广泛的方法。我想让用户仅当他们创建节点时才取消发布或发布节点。这也意味着,当且仅当他们创建未发布的节点时,他们才能够查看未发布的节点。
30 users  nodes 

6
如何从Twig模板中获取链接字段的有效URL?
我有一个名为field_my_link(机器名称)的链接字段。 在Twig模板中,我可以这样获取链接的URL值: {{ node.field_my_link.uri }} 如果在链接的URL中有一个外部 URL,例如,http://example.com它的效果很好。 但是,如果在链接的URL内存储了一个内部 URL,例如"/node/11",我会得到一个像这样的值: "internal:/node/11" 带有“ internal:”前缀。 如何获得有效的网址? 例如,如果链接的URL是“ http://example.com”我想要“ http://example.com(这已经有效),如果链接的URL是” /node/11“我想要相对URL” /node/11“,如果链接的URL是” <front>“我想要URL” /“,等等。 编辑 我可以使用以下方法在PHP预处理函数中获取所需的值: $url = $variables['node']->get('field_my_link')->first()->getUrl(); 如何在Twig模板中访问相同的值? 我知道我可以在预处理功能中执行此操作: $variables['my_url'] = $url; 然后使用来访问Twig中的url {{ my_url }},但我避免每次有链接字段时都编写一个预处理函数。
30 theming  8  uri  navigation 

2
表单的自定义验证?
我需要向表单添加自定义验证,让我们说添加文章表单。 我原本希望hook_FORM_ID_validate()可以处理此类问题,但是在API文档中找不到任何相关内容。 向表单添加自定义验证的方法是什么?
30 7  forms 


2
如何创建test_endpoint?
我是drupal的新手,并且正在使用用于REST和RESTWS模块的服务模块。我使用了RESTWS,并可以通过http://base_url/node/1.xml获取节点的内容, 现在我需要从外部PHP应用程序向drupal添加节点和用户。我在Google上搜索了一下,发现这里需要使用http:// base_drupal_url / drupal7 / test_endpoint / users。我试图从Drupal 7创建服务,但是我不知道在端点标题,名称和端点路径上应该给出什么,我想我需要在curl中提供相同的端点路径。 关于如何检查是否安装了REST Server以及如何创建端点路径的任何帮助将大有帮助。 我正在将Drupal 7与服务模块services-7.x-3.0-rc3一起使用
29 7  services 

11
如何设置页面标题?
我知道我可以使用来更改页面标题drupal_set_title(t('Amy page title')),但是当我在Drupal 8中尝试使用它时,我得到了,没有这样的功能错误。 如何在Drupal 8中更改页面标题?
29 8 

1
如何检查实体中是否存在字段?
在实体节点中,我要检查“ abc”字段是否存在。如果存在,我将通过$value->get('abc'). 但是该字段不存在的内容类型给出错误: 该网站遇到意外错误。请稍后再试。 如何检查实体中是否存在字段?
28 8  entities 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.