динамический материал JavaScript
если я прав, такой сценарий вы получите и для таких вещей, как кнопки ретвитов. (это то, что я имею в виду, чтобы предоставить вам примеры).
То, что я сделал в своем блоге, это небольшой специализированный приморский компонент с именем BITRetweet, который вы настраиваете с помощью постоянной ссылки (а также имени пользователя и стиля). Забудьте о файлах (это только усложнит), все на лету. Это оказывает с этим:
</p>
<p>BITRetweet>>renderContentOn: html</p>
<pre><code>html script with: self customizedJavascript.
html script url: self buttonJavascriptSource.
BITRetweet >> customizedJavascript
| script |
script := JSScript new.
script add: (('"',self permalink,'"') asJSObject assignTo: 'tweetmeme_url').
isCompact ifTrue:[
script add: ('"compact"' asJSObject assignTo: 'tweetmeme_style')].
script add: (('"',username,'"') asJSObject assignTo: 'tweetmeme_source').
script add: (('"',shortener,'"') asJSObject assignTo: 'tweetmeme_service').
^ script
BITRetweet >>> buttonJavascriptSource
"Answers the url to the source of the script for the button.
See:
http://help.tweetmeme.com/2009/04/06/tweetmeme-button/"
^ 'http://tweetmeme.com/i/scripts/button.js'
и, наконец, небольшой взлом String, например:
Строка >> asJSObject
^ JSObject new alias: self
работа с постоянными ссылками
для постоянной ссылки есть две вещи:
- генерирует его
- используя его (заставляя приложение реагировать на запрос)
для 1 вы можете сделать что-то вроде этого:
PostComponent>>updateUrl: anUrl</p>
<pre><code>super updateUrl: anUrl.
anUrl addToPath: model asURLNice
Сообщение >> asURLNice
"Answers the receiver in an (destructive) encoded
way which is url friendly"
^ String streamContents: [:stream|
self do:[:char|
char isSeparator
ifTrue:[stream nextPut: $-]
ifFalse:[
char isAlphaNumeric ifTrue:[
stream nextPut: char asLowercase asNonDiacritical]]]]
и для 2 вы должны сделать что-то вроде этого в основном компоненте приложения:
</p>
<p>BlogApplication>>initialRequest: aRequestOrNil</p>
<pre><code>| paths |
super initialRequest: aRequestOrNil.
aRequestOrNil ifNil:[^ nil].
(aRequestOrNil url asString endsWith: '/sitemap.xml') ifTrue:[
^ self respondSitemap].
paths := aRequestOrNil url path.
paths size < 2 ifTrue:[^nil].
(Post atURLTitle: paths last) ifNotNilDo: [:value |
^ self readPost: value].
живые примеры
Вы можете увидеть все это в действии в моем блоге или в выборочном творчестве
asNonDiacritical нужен мне, потому что я пишу на трех языках, но DiacriticalSupport доступен в squeaksource , если вам это нужно
весело взломать
о /