0

次のrubyコードは、VoodooPad内にページを自動的に作成し、各ページにメタタグを追加します。

vp = app("VoodooPad.app")
doc = vp.open vpdoc

page_names = [@name]

if self.class.to_s.match('Stake::Stack')
    # Create the release notes page. Only run on parent stack
    notes = "#{@name} Release Notes"
    page_names.push notes
    doc.remove :with_name => notes
    doc.create :new => :page, :with_name => notes, :with_content => self.release_notes
end

# Create the settings page
settings = "#{@name} Settings"
page_names.push settings
doc.remove :with_name => settings
doc.create :new => :page, :with_name => settings, :with_content => self.to_md

page_names.each do |page_name|
    # Add the meta tags to the product page
    page = doc.pages[page_name]
    puts page_name
    page.remove_meta_record :with_key => "description"
    page.remove_meta_record :with_key => "url"
    page.remove_meta_record :with_key => "name"
    page.remove_meta_record :with_key => "image"
    page.remove_meta_record :with_key => "version"
    page.remove_meta_record :with_key => "stacks_version"
    page.add_meta_record :with_value => {'version'          => @version_str}
    page.add_meta_record :with_value => {'stacks_version'   => @stacks_version}
    page.add_meta_record :with_value => {'subtitle'         => @subtitle}
    page.add_meta_record :with_value => {'url'              => @info_url}
    page.add_meta_record :with_value => {'image'            => @basename + '@128.png'}
    page.add_meta_record :with_value => {'name'             => @name}
end

各ブロックで、同じメタタグが3ページに追加されています。ただし、タグは3ページのうち2ページにのみ追加されています。「バッジ」の名前を例にとると、これが私のページ名です。

Badges
Badges Release Notes
Badges Settings

配列の順序に関係なく、「バッジ」ページには常に適切なタグが付けられます。ただし、他の2ページについては、最初に処理された方が機能します。他はしません。

ページ名のスペースかもしれないと思いました。ただし、それは問題ではありません。私は同じ振る舞いをします。コードがこれらのページの両方を適切に動的に作成することに気付いた場合。

タイミングの問題かもしれないと思って、睡眠を追加してみました。いいえ。

ハマった。ヘルプ。

4

1 に答える 1

0

私はそれを考え出した。タグを追加していたページは、現在アクティブなページではありませんでした。

vp = app("VoodooPad.app")
doc = vp.open vpdoc

page_names = Array.new

if self.class.to_s.match('Stake::Stack')
    # Only the parent stack has a main page
    page_names.push @name

    # Create the release notes page. Only run on parent stack
    notes = "#{@name} Release Notes"
    page_names.push notes
    doc.remove :with_name => notes
    doc.create :new => :page, :with_name => notes, :with_content => self.release_notes
end

# Create the settings page
settings = "#{@name} Settings"
page_names.push settings
doc.remove :with_name => settings
doc.create :new => :page, :with_name => settings, :with_content => self.to_md

# Have to open to different page to ensure its not open when I add meta tags.
doc.open_page :with_name => 'index'

page_names.each do |page_name|
    # Add the meta tags to the product page
    page = doc.pages[page_name]
    puts page_name
    page.remove_meta_record :with_key => "description"
    page.remove_meta_record :with_key => "url"
    page.remove_meta_record :with_key => "name"
    page.remove_meta_record :with_key => "image"
    page.remove_meta_record :with_key => "version"
    page.remove_meta_record :with_key => "stacks_version"
    page.add_meta_record :with_value => {'version'          => @version_str}
    page.add_meta_record :with_value => {'stacks_version'   => @stacks_version}
    page.add_meta_record :with_value => {'subtitle'         => @subtitle}
    page.add_meta_record :with_value => {'url'              => @info_url}
    page.add_meta_record :with_value => {'image'            => "#{@basename}@128.png".downcase}
    page.add_meta_record :with_value => {'name'             => @name}
    # Open current page to ensure next page is not open or else cannot add tags
    doc.open_page :with_name => page_name
end
于 2012-12-11T03:44:17.873 に答える