[gen] Bugfixes: handle multilingual titles in queries, references, breadcrumbs...
This commit is contained in:
parent
f8a7103c7a
commit
8aed007623
6 changed files with 34 additions and 6 deletions
|
@ -542,6 +542,13 @@ class Field:
|
|||
if self.isEmptyValue(obj, value): return ''
|
||||
return value
|
||||
|
||||
def getShownValue(self, obj, value, showChanges=False):
|
||||
'''Similar to m_getFormattedValue, but in some contexts, only a part of
|
||||
p_value must be shown. For example, sometimes we need to display only
|
||||
a language-specific part of a multilingual field (see overridden
|
||||
method in string.py).'''
|
||||
return self.getFormattedValue(obj, value, showChanges)
|
||||
|
||||
def getIndexType(self):
|
||||
'''Returns the name of the technical, Zope-level index type for this
|
||||
field.'''
|
||||
|
|
|
@ -50,7 +50,7 @@ class Ref(Field):
|
|||
inPopup=linkInPopup)"
|
||||
href=":fullUrl" class=":cssClass" target=":target.target"
|
||||
onclick=":target.openPopup">:(not includeShownInfo) and \
|
||||
tied.title or field.getReferenceLabel(tied)
|
||||
tied.o.getShownValue('title') or field.getReferenceLabel(tied)
|
||||
</a><span name="subTitle" style=":showSubTitles and 'display:inline' or \
|
||||
'display:none'">::tied.o.getSubTitle()</span></x>''')
|
||||
|
||||
|
@ -1237,7 +1237,7 @@ class Ref(Field):
|
|||
for fieldName in self.shownInfo:
|
||||
refType = refObject.o.getAppyType(fieldName)
|
||||
value = getattr(refObject, fieldName)
|
||||
value = refType.getFormattedValue(refObject.o, value)
|
||||
value = refType.getShownValue(refObject.o, value)
|
||||
if refType.type == 'String':
|
||||
if refType.format == 2:
|
||||
value = self.xhtmlToText.sub(' ', value)
|
||||
|
|
|
@ -632,6 +632,20 @@ class String(Field):
|
|||
showChanges, lg)
|
||||
return res
|
||||
|
||||
def getShownValue(self, obj, value, showChanges=False):
|
||||
'''For a multilingual field, this method only shows one specific
|
||||
language part.'''
|
||||
languages = self.getAttribute(obj, 'languages')
|
||||
if len(languages) == 1:
|
||||
return self.getUnilingualFormattedValue(obj, value, showChanges)
|
||||
if not value: return value
|
||||
# Try to propose the part that is in the user language, or the part of
|
||||
# the first content language else.
|
||||
language = obj.getUserLanguage()
|
||||
if language not in value: language = languages[0]
|
||||
return self.getUnilingualFormattedValue(obj, value[language],
|
||||
showChanges, language)
|
||||
|
||||
def extractText(self, value):
|
||||
'''Extracts pure text from XHTML p_value.'''
|
||||
return XhtmlTextExtractor(raiseOnError=False).parse('<p>%s</p>' % value)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue