首先在Programmers.SE上输入,但想象一下这可能更适合这里 - 纯粹是因为它不是要求就特定技术问题提出建议.随意投票移动!
我目前正在使用Ruby on Rails 的"Spree"电子商务平台开展一个项目.配置和使用是一件非常愉快的事情.但欢乐在那里停止了.
我正在尝试开发一个完全自定义的界面 - 与默认配置完全不相似的界面.现在Spree文档显示我只有两个选项:
deface
替代.到处.似乎要覆盖其他覆盖.当然,使用污点的风格如此戏剧性的变化是一个彻头彻尾的噩梦; Deface
看起来不像是一种可以接受的方式来重写一个完整的UI; 它似乎也没有效率.所以我选择完全重建视图.
然后实现了大约8个插件全部依赖于污损覆盖,视图文件硬编码,目标选择器通常是" flakey "(充其量).
除了狂欢网站上非常少的文档,我所能找到的只是来自各种会议的幻灯片,其中 - 没有谈话的背景实际上是最小的使用.他们似乎都专注于使用污损覆盖进行大致简单的更改,而最近的更改似乎已超过一年.
我错过了什么吗?有谁知道执行这样的事情的最佳做法?我应该在哪里看?
我正在尝试向其中一个Spree管理员视图中已存在的表单添加输入.这是覆盖文本(我删除了一些以显示为中心和嘈杂的残骸):
new_html = "
<div id='neato_new_field'>
<p id='product_display_value'>
<label for='display_value'>Display Value</label>
<br>
<input type='text' name='product[display_value]' size='30' id='product_display_value' value=''>
</p>
</div>"
Deface::Override.new(:virtual_path => "spree/admin/products/_form",
:insert_after => "div.clearfix",
:text => new_html,
:name => "add_display_value")
Run Code Online (Sandbox Code Playgroud)
我需要知道的是在输入上设置'value'属性的值,以便在渲染此视图时获取当前在该对象上的内容.
我尝试将value='#{@product.display_value}'放在那里,但它抱怨@product为零.我甚至可以使用这样的插值来获取display_value吗?这是在控制器甚至尝试渲染之前还是之后完成的这种破坏?
我现在想知道如何解决这个问题.我是否必须从已经存在的html中删除产品ID,使用它来加载产品然后把那个值放在那里?我真的希望我错过了一些基本的东西,这使得这个问题很难解决:P很多Spree定制都是这种情况 - 一开始我不清楚如何做到这一点但是一旦我想到它out,实现我的自定义很简单...
谢谢,jd
我正在尝试使用Deface在Spree Admin的表中的列中添加一个按钮.但我无法让我的CSS类选择器正确.我可以使用数据挂钩选择表行,并且可以选择子元素(例如td,span),但不能通过特定类(在本例中为.balance_due)进行选择.我错过了一些简单的事吗?
我的覆盖:
Deface::Override.new(:virtual_path => "spree/admin/orders/index",
:name => "add_capture_order_shortcut2",
:insert_bottom => "[data-hook='admin_orders_index_rows'] .balance_due",
:text => '<h1>hey yo, your balance is due</h1>'
)
Run Code Online (Sandbox Code Playgroud)
我已经使用jQuery确认了CSS选择器,即:
$("[data-hook='admin_orders_index_rows'] .balance_due")
=> [<span class=?"state balance_due">?…</span>]
Run Code Online (Sandbox Code Playgroud)
生成的HTML的一个exerpt:
<tr data-hook="admin_orders_index_rows" class="state-complete odd">
...
<td class="align-center"><span class="state balance_due"><a href="/admin/orders/R617712280/payments">balance due</a></span></td>
...
</tr>
Run Code Online (Sandbox Code Playgroud) 我将Spree包含在现有网站中.我正在使用Deface更改spree标题以改为呈现我的网站标题.因此,我使用以下Deface DSL代码
<!-- replace_contents "header[data-hook]" -->
<%= render :partial => "layouts/my_site_header.html.erb" %>
Run Code Online (Sandbox Code Playgroud)
在里面_my_site_header.html.erb
我有类似的东西
<ul>
<li><%= link_to "Home", home_path %></li>
<li><%= link_to "Game", game_path %></li>
<li><%= link_to "Community", community_path %></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误
undefined local variable or method `home_path' for #<#<Class:0x8a73c20>:0x8af0e58>
Run Code Online (Sandbox Code Playgroud)
我知道代码在Spree范围内由Deface执行,因此我的网站的url助手是未定义的.我可以使用完整的方法名称来解决这个问题Rails.application.routes.url_helpers.home_path
但是,我真的不想为我的所有链接添加这个.难道没有办法告诉Spree包含我网站的网址助手吗?请帮忙!
我正在尝试使用预先填充的值填充我的帐单邮寄地址.我写了一个污点:
Deface::Override.new(:virtual_path => 'spree/address/_form',
:name => 'prepopulate_billing_address',
:set_attributes => 'p#order_bill_address_attributes_phone',
:attributes => {:value => "122344"}
)
Run Code Online (Sandbox Code Playgroud)
而内容属于 app/overrides/autofill_billing_address.rb
我正在尝试替换此视图 Spree表单视图
以上污点,但破损日志说
Deface: 'prepopulate_billing_address' matched 0 times with 'p#order_bill_address_attributes_phone'
Run Code Online (Sandbox Code Playgroud)
来自spree实例运行的id是order_bill_address_attributes_phone
并且被包装<p>
.任何的想法?谢谢您的帮助!
我正在spree 2.1上构建一个自定义选项卡,我在我的Deface覆盖上有这个工作正常,但是当我尝试点击我的选项卡已经在这个选项卡上时,它会转到url/admin/admin/places.所以我需要这个总是去/ admin/places.
找到这个https://codeclimate.com/github/spree/spree/Spree::Admin::NavigationHelper,它说该选项卡接受第一个参数并创建路径admin_places_path.
:insert_after => "[data-hook='admin_tabs']",
:text => "<%= tab :places, :icon => 'icon-th-large'%>"
Run Code Online (Sandbox Code Playgroud)
我尝试了通常:url param with'admin/places'但得到了相同的结果,并且正在寻找选项卡实现,这导致我进入codeclimate,现在在这里.谁知道如何避免这种情况?