Changeset 1466 in products
- Timestamp:
- Dec 22, 2009 7:23:04 PM (14 years ago)
- Location:
- quintagroup.seoptimizer/trunk/quintagroup/seoptimizer
- Files:
-
- 5 added
- 5 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/browser/keywords.py
r1463 r1466 16 16 def validateKeywords(self, text): 17 17 """ see interface """ 18 ts = getToolByName(self.context, 'translation_service') 18 19 # extract keywords from text 19 if not text.strip(): 20 return _(u'Keywords list is empty!') 21 22 keywords = map(lambda x: x.strip(), text.lower().split('\n')) 23 if not keywords: 24 return _(u'Keywords list is empty!') 25 20 if text.lower().strip(): 21 keywords = map(lambda x: x.strip(), text.lower().strip().split('\n')) 22 else: 23 return ts.utranslate(None, _(u'Keywords list is empty!'), context=self.context) 26 24 # request html page of context object 27 25 url = '%s?qseo_without_additional_keywords=1' % self.context.absolute_url() … … 69 67 # check every keyword on appearing in body of html page 70 68 missing = [] 69 finding = [] 71 70 added = {} 71 finded = {} 72 72 for keyword in keywords: 73 if keyword not in added.keys() and not re.compile(r'\b%s\b' % keyword, re.I).search(page_text): 74 missing.append(keyword) 75 added[keyword] = 1 76 73 if keyword: 74 keyword_on_page = len(re.compile(r'\s%s\s' % keyword, re.I).findall(page_text)) 75 if keyword not in added.keys() and not keyword_on_page: 76 missing.append(keyword.decode('utf8')) 77 added[keyword] = 1 78 if keyword not in finded.keys() and keyword_on_page: 79 finding.append(keyword.decode('utf8')+' - '+repr(keyword_on_page)) 80 finded[keyword] = 1 77 81 # return list of missing keywords 78 82 if missing: 79 msg = u"""Next keywords did not appear on the page:\n%s""" % '\n'.join(missing)83 msg = ts.utranslate(None, _('missing_keywords', default=u'Next keywords did not appear on the page:\n${missing}', mapping={'missing':'\n'.join(missing)}), context=self.context) 80 84 else: 81 msg = u"""All keywords found on the page!"""82 return _(msg)85 msg = ts.utranslate(None, _('finded_keywords', default=u'All keywords found on the page!\nMore detailed:\n${found}', mapping={'found': '\n'.join(finding)}), context=self.context) 86 return msg 83 87 84 88 def walkTextNodes(self, parent, page_words=[]): … … 100 104 # pop everything from the the left-angle bracket until the right-angle bracket 101 105 s_list.pop(i) 102 106 103 107 # pops the right-angle bracket, too 104 108 s_list.pop(i) 105 109 else: 106 110 i=i+1 107 111 108 112 # convert the list back into text 109 113 join_char='' -
quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/browser/views.py
r1463 r1466 307 307 template = ViewPageTemplateFile('templates/seo_context_properties.pt') 308 308 309 310 309 def test( self, condition, first, second ): 311 310 """ 312 311 """ 313 312 return condition and first or second 314 313 314 def getMainDomain(self, url): 315 url = url.split('//')[-1] 316 dompath = url.split(':')[0] 317 dom = dompath.split('/')[0] 318 return '.'.join(dom.split('.')[-2:]) 319 320 def validateSEOProperty(self, property, value): 321 purl = getToolByName(self.context, 'portal_url')() 322 state = '' 323 if property == PROP_PREFIX+'canonical': 324 pdomain = self.getMainDomain(purl) 325 if not pdomain == self.getMainDomain(value): 326 state = _('canonical_msg', default=u'Canonical URL mast be in ${pdomain} domain.', mapping={'pdomain': pdomain}) 327 return state 328 315 329 def setProperty(self, property, value, type='string'): 316 330 context = aq_inner(self.context) 317 if context.hasProperty(property): 318 context.manage_changeProperties({property: value}) 319 else: 320 context.manage_addProperty(property, value, type) 331 state = self.validateSEOProperty(property, value) 332 if not state: 333 if context.hasProperty(property): 334 context.manage_changeProperties({property: value}) 335 else: 336 context.manage_addProperty(property, value, type) 337 return state 321 338 322 339 def manageSEOProps(self, **kw): 323 340 context = aq_inner(self.context) 341 state = '' 324 342 delete_list, overrides, values = [], [], [] 325 343 seo_items = dict([(k[len(SEO_PREFIX):],v) for k,v in kw.items() if k.startswith(SEO_PREFIX)]) … … 329 347 else: 330 348 values.append(key) 331 332 349 for val in values: 333 if val in overrides and seo_items[val+SUFFIX]: 334 self.setProperty(PROP_PREFIX+val, seo_items[val]) 350 if val in overrides and seo_items.get(val+SUFFIX): 351 state = self.setProperty(PROP_PREFIX+val, seo_items[val]) 352 if state: 353 return state 335 354 elif context.hasProperty(PROP_PREFIX+val): 336 355 delete_list.append(PROP_PREFIX+val) 337 if delete_list: context.manage_delProperties(delete_list) 356 if delete_list: 357 context.manage_delProperties(delete_list) 358 self.manageSEOCustomMetaTagsProperties(**kw) 359 return state 338 360 339 361 def setSEOCustomMetaTags(self, custommetatags): … … 342 364 self.setProperty('%s%s' % (PROP_CUSTOM_PREFIX, tag['meta_name']), tag['meta_content']) 343 365 344 def delAllSEOCustomMetaTags ByNames(self):345 context = self.context366 def delAllSEOCustomMetaTagsProperties(self): 367 context = aq_inner(self.context) 346 368 delete_list = [] 347 369 for property, value in context.propertyItems(): 348 if property. find(PROP_CUSTOM_PREFIX) == 0 and len(property) > len(PROP_CUSTOM_PREFIX):370 if property.startswith(PROP_CUSTOM_PREFIX) and not property == PROP_CUSTOM_PREFIX: 349 371 delete_list.append(property) 350 if delete_list: context.manage_delProperties(delete_list) 351 352 def delSEOCustomMetaTagByName(self, custommetatagname): 353 context = self.context 354 seo_custom_prop = PROP_CUSTOM_PREFIX + custommetatagname 355 if context.hasProperty(seo_custom_prop): 356 context.manage_delProperties([seo_custom__prop]) 357 358 def updateSEOCustomMetaTags(self, custommetatags): 372 if delete_list: 373 context.manage_delProperties(delete_list) 374 375 def updateSEOCustomMetaTagsProperties(self, custommetatags): 359 376 context = aq_inner(self.context) 360 377 site_properties = getToolByName(context, 'portal_properties') 361 378 globalCustomMetaTags = [] 362 363 379 if hasattr(site_properties, 'seo_properties'): 364 380 custom_meta_tags = getattr(site_properties.seo_properties, 'default_custom_metatags', []) … … 368 384 globalCustomMetaTags.append({'meta_name' : name_value[0], 369 385 'meta_content' : len(name_value) == 1 and '' or name_value[1]}) 370 metalist = []371 386 for tag in custommetatags: 372 387 meta_name, meta_content = tag['meta_name'], tag['meta_content'] 373 388 if meta_name: 374 389 if not [gmt for gmt in globalCustomMetaTags if (gmt['meta_name']==meta_name and gmt['meta_content']==meta_content)]: 375 metalist.append(tag) 376 if metalist: self.setSEOCustomMetaTags(metalist) 377 378 def manageSEOCustomMetaTags(self, **kw): 379 context = aq_inner(self.context) 380 if kw.has_key('seo_custommetatags_override'): 381 if kw.get('seo_custommetatags_override'): 382 custommetatags = kw.get('seo_custommetatags', {}) 383 self.updateSEOCustomMetaTags(custommetatags) 384 else: 385 self.delAllSEOCustomMetaTagsByNames() 386 elif kw.get('seo_custommetatags'): 387 self.delAllSEOCustomMetaTagsByNames() 390 self.setProperty('%s%s' % (PROP_CUSTOM_PREFIX, meta_name), meta_content) 391 392 def manageSEOCustomMetaTagsProperties(self, **kw): 393 context = aq_inner(self.context) 394 self.delAllSEOCustomMetaTagsProperties() 395 if kw.get('seo_custommetatags_override'): 396 custommetatags = kw.get('seo_custommetatags', {}) 397 self.updateSEOCustomMetaTagsProperties(custommetatags) 388 398 389 399 def __call__( self ): … … 395 405 submitted = form.get('form.submitted', False) 396 406 if submitted: 397 self.manageSEOProps(**form) 398 self.manageSEOCustomMetaTags(**form) 399 context.plone_utils.addPortalMessage( _(u'Content SEO properties have been saved.')) 400 return request.response.redirect(self.context.absolute_url()) 401 else: 402 return self.template() 407 state = self.manageSEOProps(**form) 408 if not state: 409 state = _('seoproperties_saved', default=u'Content SEO properties have been saved.') 410 context.plone_utils.addPortalMessage(state) 411 return request.response.redirect(self.context.absolute_url()) 412 context.plone_utils.addPortalMessage(state, 'error') 413 return self.template() -
quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/configure.zcml
r1463 r1466 10 10 11 11 <five:registerPackage package="." /> 12 <i18n:registerTranslations directory="locales" /> 12 13 13 14 <genericsetup:registerProfile
Note: See TracChangeset
for help on using the changeset viewer.