非拉丁字母的 Drupal 视图词汇表
Posted
技术标签:
【中文标题】非拉丁字母的 Drupal 视图词汇表【英文标题】:Drupal views glossary for non latin letters 【发布时间】:2011-07-27 08:23:50 【问题描述】:嗯,我在drupal.org和***上搜索过,没有找到类似的问题,希望没有漏掉什么。
我正在使用 drupal 7 构建一个网站,其中的内容需要按字母分组。词汇表中的视图似乎是最好的解决方案,而且效果很好。唯一的问题是我使用了非拉丁字母,如 Č Đ Č Š Ž 并且顺序混乱。我需要像 Gaj 的拉丁字母中的顺序:
A B C Č Ć D Dž Đ E F G H I J K L Lj M N Nj O P R S Š T U V Z Ž
如您所见,还有一个问题,因为有些字母带有“两个字母”,但将 Lj 显示为 L 将是我可以接受的解决方案。最大的问题是C和Ć显示在Č下但Đ与D分开,所以我得到:
A (1) | Č (3) | D (1) | Ž (1) | Đ (1) 为例。
这个问题有没有优雅的解决方案?将 C 和 Ć 与 Č 分开或合并 D 和 Đ。请帮忙。
【问题讨论】:
【参考方案1】:我在这个派对上迟到了,
坏消息:这完全是由于 SQL 排序而不是视图。 Drupal 的常用数据库排序规则,utf8_general_ci 指示 mysql 在 GROUP 和 WHERE 语句中将这些字符视为相同。
特别是;生成词汇表的视图查询当前是:
SELECT SUBSTRING(node.title, 1, 1) AS title_truncated, COUNT(node.nid)
AS num_records
FROM
node node
WHERE (( (node.status = '1') AND (node.type IN ('my_nodetype')) ))
GROUP BY title_truncated
ORDER BY title_truncated ASC
LIMIT 10 OFFSET 0
此处的 GROUP BY 消除了排序规则列出为相等的 unicode 字符之间的任何差异,因为它将它们分组并视为相等。
好消息:通过实现 hook_views_query_alter() 来指示 MySQL 进行 GROUP 和 WHERE 为您的视图使用排序规则 utf8_bin,很快就能解决这个问题。
/**
* Implementation of hook_views_query_alter().
*/
function mymodule_views_query_alter(&$view, &$query)
if ($view->name == 'my_view')
// Stop the glossary from treating characters equal.
if ($view->is_attachment)
foreach ($query->groupby as &$condition_group)
if ($condition_group == 'title_truncated')
$condition_group = "title_truncated COLLATE utf8_bin";
// Rewrite the attached view to filter on unique characters.
else
foreach ($query->where as &$condition_where)
foreach ($condition_where['conditions'] as &$cur_condition)
if ($cur_condition['field'] == 'SUBSTRING(node.title, 1, 1) = :node_title')
$cur_condition['field'] = 'SUBSTRING(node.title, 1, 1) = :node_title COLLATE utf8_bin';
希望这对遇到这种情况的其他人有所帮助。
【讨论】:
【参考方案2】:您的网站都是俄语的吗?如果是这样,请查看此页面,Install Drupal 7.0 in your language out of the box! 它位于 localize.Drupal.org,它是 drupal.org 的本地化子域,专门用于创建非英语语言的 Drupal 站点。使用 Drupal 7,可以安装多种语言的本地化版本,包括俄语。
虽然我还没有尝试过,但我相信值得安装本地化版本来查看词汇表是否能如您所愿。如果没有,请在此处告诉我们。
【讨论】:
该网站是塞尔维亚语,Drupal 的翻译尚未完成。但我仍然认为即使翻译了字母顺序也将保持不变。我设法找到了分类学的解决方案。我用我需要的所有字母创建了一个词汇表,并使用重量来订购它们。连Lj、Nj……都没有问题。然后在视图中我创建了一个块,现在我可以将字母放在任何我想要的地方:) 很高兴听到您解决了这个问题。分类法和视图可以一起做很多事情!以上是关于非拉丁字母的 Drupal 视图词汇表的主要内容,如果未能解决你的问题,请参考以下文章