Hi Paolo,
I have installed your application and it is working perfectly.
I want have same multiimage upload functionality in my application. So I
changed one of the table names.
But unfortunately it is not working. Iam not sure what Iam missing I have
copied the css and js files as well. Is there a way that you can help me.
my controller:
def new():
# only SQLFORM.factory tested
form=SQLFORM.factory(db.submission,db.t_photos)
if form.accepts(request, session, onvalidation=lambda form:check(form)): #
Is it possible to use onvalidation with form.process() syntax ?
submission_id =
db.submission.insert(**db.submission._filter_fields(form.vars))
nfiles = 0
for var in request.vars:
if var.startswith('f_photo') and request.vars[var] != '':
uploaded = request.vars[var]
if isinstance(uploaded,list):
# files uploaded through input with "multiple" attribute set on true
counter=0
for element in uploaded:
counter += 1
nfiles += 1
file_title = element.name.split(":")[-1] # TODO: could this be made better?
# I mean, the title must be appended to element's name
# or is there another way?
db.t_photos.insert(
f_trip_ref=trip_id,
f_title=file_title+" ("+str(counter)+")" if file_title!="" else file_title,
f_photo=db.t_photos.f_photo.store(element.file,element.filename))
else:
# only one file uploaded
element = request.vars[var]
nfiles += 1
db.t_photos.insert(
f_trip_ref=trip_id,
f_title=element.name.split(":")[-1],
f_photo=db.t_photos.f_photo.store(element.file,element.filename))
session.flash = T('%s photo%s uploaded'%(nfiles, 's' if nfiles>1 else ''))
redirect(URL('teacher'))
if isinstance(form,FORM):
# hide f_title form's row. Is there a better way to accomplish it?
del form[0][3]
return dict(form=form)
view:
{{response.files.extend([URL('static','css/multiupload.css'),URL('static','js/jquery.multiupload.js')])}}
{{left_sidebar_enabled=right_sidebar_enabled=False}}
{{extend 'layout.html'}}
<div>
{{=form}}
<script type="text/javascript" charset="utf-8">
//<!--
jQuery('input[name="f_photo"]:not(.processed)').multiUpload({
mw_placeholder:"{{=T('insert a title')}}",
mw_text_addBtn:"+",
mw_tooltip_addBtn:"{{=T('add a file')}}",
mw_text_clearBtn:"x",
mw_tooltip_clearBtn:"{{=T('remove all')}}",
mw_tooltip_removeFileBtn:"{{=T('remove this file')}}",
mw_tooltip_removeGroupBtn:"{{=T('remove this file group')}}",
mw_group_title:"{{=T('FILE GROUP')}}",
mw_fileNumber:false,
mw_maxElementAllowed:5
});
//-->
</script>
</div>
model:
db.define_table('submission',
Field('name', requires=[IS_NOT_EMPTY(), IS_ALPHANUMERIC()]),
Field('email', requires=[IS_NOT_EMPTY(), IS_EMAIL()]),
#Field('file','upload', requires=IS_NOT_EMPTY()),
Field('status', readable=False,writable=False),
Field('posted_on', 'date', default=request.now, readable=False,
writable=False),
Field('problem_id','reference problem',readable=False, writable=False))
db.define_table('t_photos',
Field('f_trip_ref', type='reference submission', notnull=True,
writable=False, readable=False),
Field('f_title', type='string', label=T('Title'), notnull=False), #
notnull=False is required
Field('f_photo', type='upload',
uploadfolder=request.folder+'static/pictures', notnull=False, #
notnull=False is required
label=T('Photos'),
represent=lambda x, row:x and A('%s'%(db.t_photos.f_photo.retrieve(x)[0]),
_href=URL('default','viewer.html',args=x),
_target="_blank",
_title=T("open photo"),
_class='file-reference')
or ''
),
)
On Friday, June 22, 2012 at 1:46:51 PM UTC-5, Paolo Caruccio wrote:
>
> Richard,
>
> I'm sorry for late answer. I spent a bit of time playing with bootstrap
> 2.0.4 and rewriting the code to follow frequent web2py changes.
>
> In attached app, you'll find a rewieved version of multiuploads control
> and some bootstrap features (carousel, web2py flash messages replaced with
> bootstrap alert, form and form errors).
>
> I don't know if the approach - that you'll see in app - is enough to
> satisfy your request, but It represents the way I would use.
>
> The app is a toy. I mean, you could find many bugs, not optimized code,
> and so on. Its scope is only to demonstrate multiuploads control usage in
> an web2py application.
>
>
>
> Il giorno venerdì 1 giugno 2012 22:08:06 UTC+2, Richard ha scritto:
>>
>> No problem, I don't have time neither maybe for a couples of days too :)
>>
>> Richard
>>
>> On Fri, Jun 1, 2012 at 3:24 PM, Paolo Caruccio <[email protected]
>> <javascript:>> wrote:
>>
>>> Richard,
>>>
>>> I made some reflections on what you want to do and it's not easy, since
>>> the use of control for simultaneous upload of multiple files was aimed to
>>> replace the standard control. As an example of use, you can see
>>> http://ochiba77.blogspot.it/2012/01/web2py-slices-sending-email-from-form.html
>>> However, we can use a different approach to getting what you want
>>> through the use of a smartgrid. I'll post soon a demo application (in this
>>> days I'm very busy in personal matters).
>>>
>>> Il giorno giovedì 31 maggio 2012 19:35:02 UTC+2, Richard ha scritto:
>>>
>>>> Here where I get as now :
>>>>
>>>> Controler :
>>>> def trip_update():
>>>> # only SQLFORM.factory tested
>>>> form=SQLFORM.factory(db.t_trip, db.t_photos)
>>>> for row in db(db.t_trip.id == request.args(0)).select(db.t_
>>>> trip.ALL):
>>>> for f in db.t_trip.fields:
>>>> form.vars[f]=row[f]
>>>> photos_files = []
>>>> for row in db(db.t_photos.f_trip_ref ==
>>>> request.args(0)).select(db.t_photos.ALL):
>>>> #for f in db.t_photos.fields:
>>>> #f_photo_0:CONTENT_OF_f_title
>>>> #form.vars['f_photo_'+str(i)+':'+row.f_title]=row
>>>> #LI(_title='couleurs (1).png', A('x',
>>>> _href='javascript:void(0);', _class='mw_delItem', _title='remove this
>>>> file'), I(B(EM(_class='mw_file-ext-png'))), SPAN('test1'))
>>>> photos_files.append(XML(LI(A('x', _href='javascript:void(0);',
>>>> _class='mw_delItem', _title='remove this file'),
>>>> EM(_class='mw_file-ext-png'), SPAN(row.f_title),
>>>> _title=row.f_photo)).xml())
>>>> # response.js="""var photos_files_list = "{{=photos_files}}"
>>>> # $(document).ready( function () {
>>>> # if(photos_files_list != 'None') {
>>>> # $.each(photos_files_list, function(i, val) {
>>>> # $('ul.mw_list').append(photos_files_list[i]);
>>>> # });
>>>> # };
>>>> # });"""
>>>> #response.js="""var photos_files_list = "{{=photos_files}}"
>>>> $(document).ready( function () {if(photos_files_list != 'None')
>>>> {$.each(photos_files_list, function(i, val) {$('ul.mw_list').append(
>>>> photos_files_list[i]);});};});"""
>>>> #A(T('Access'),_href=URL(r=request,f='read',args=(
>>>> request.args(0),str(id))))
>>>>
>>>> #<li title="couleurs (1).png"><a class="mw_delItem"
>>>> href="javascript:void(0);" title="remove this file">x</a><i><b><em
>>>> class="mw_file-ext-png"></em></b></i><span>test1</span></li>
>>>> if form.accepts(request, session, onvalidation=lambda
>>>> form:check(form)): # Is it possible to use onvalidation with
>>>> form.process()
>>>> syntax ?
>>>> trip_id = request.args(0)
>>>> db(db.t_trip.id == trip_id).update(**db.t_trip._
>>>> filter_fields(form.vars))
>>>> nfiles = 0
>>>> for var in request.vars:
>>>> if var.startswith('f_photo') and request.vars[var] != '':
>>>> uploaded = request.vars[var]
>>>> if isinstance(uploaded,list):
>>>> # files uploaded through input with "multiple"
>>>> attribute set on true
>>>> counter=0
>>>> for element in uploaded:
>>>> counter += 1
>>>> nfiles += 1
>>>> file_title = element.name.split(":")[-1] #
>>>> TODO: could this be made better?
>>>> # I
>>>> mean, the title must be appended to element's name
>>>> # or
>>>> is there another way?
>>>> db.t_photos.insert(
>>>> f_trip_ref=trip_id,
>>>> f_title=file_title+" ("+str(counter)+")" if
>>>> file_title!="" else file_title,
>>>> f_photo=db.t_photos.f_photo.
>>>> store(element.file,element.filename))
>>>> else:
>>>> # only one file uploaded
>>>> element = request.vars[var]
>>>> nfiles += 1
>>>> db.t_photos.insert(
>>>> f_trip_ref=trip_id,
>>>> f_title=element.name.split(":")[-1],
>>>> f_photo=db.t_photos.f_photo.
>>>> store(element.file,element.filename))
>>>>
>>>> session.flash = T('%s photo%s uploaded'%(nfiles, 's' if
>>>> nfiles>1 else ''))
>>>> redirect(URL('trip_read'))
>>>>
>>>> if isinstance(form,FORM):
>>>> # hide f_title form's row. Is there a better way to accomplish
>>>> it?
>>>> del form[0][3]
>>>>
>>>> return dict(form=form, photos_files=photos_files)
>>>>
>>>> View :
>>>>
>>>> {{response.files.extend([URL('static','css/multiupload.css')
>>>> ,URL('static','js/jquery.multiupload.js')])}}
>>>> {{left_sidebar_enabled=right_sidebar_enabled=False}}
>>>> {{extend 'layout.html'}}
>>>> <div>
>>>> {{=form}}
>>>> <ul>{{=photos_files[0]}}</ul>
>>>> <script type="text/javascript" charset="utf-8">
>>>> //<!--
>>>> jQuery('input[name="f_photo"]:not(.processed)').multiUpload({
>>>> mw_placeholder:"{{=T('insert a title')}}",
>>>> mw_text_addBtn:"+",
>>>> mw_tooltip_addBtn:"{{=T('add a file')}}",
>>>> mw_text_clearBtn:"x",
>>>> mw_tooltip_clearBtn:"{{=T('remove all')}}",
>>>> mw_tooltip_removeFileBtn:"{{=T('remove this file')}}",
>>>> mw_tooltip_removeGroupBtn:"{{=T('remove this file group')}}",
>>>> mw_group_title:"{{=T('FILE GROUP')}}",
>>>> mw_fileNumber:false,
>>>> mw_maxElementAllowed:5
>>>> });
>>>> //-->
>>>> </script>
>>>> </div>
>>>>
>>>> <script type="text/javascript" charset="utf-8">
>>>> var photos_files_list = {{=photos_files}}
>>>> $(document).ready( function () {
>>>> if(photos_files_list != 'None') {
>>>> $.each(photos_files_list, function(i, val) {
>>>> $('ul.mw_list').append(val); //photos_files_list[i]
>>>> });
>>>> };
>>>> });
>>>> </script>
>>>>
>>>> {{if request.is_local:}}
>>>> {{=response.toolbar()}}
>>>> {{pass}}
>>>>
>>>>
>>>> Problem : the items are not showing up in the UL box, because a
>>>> conversion between python and javascript text format I think (I know the
>>>> get into the box as plain text), Second thing, the destruction of the
>>>> items
>>>> is not working not sure why. Also there is code refactoring to do since
>>>> the
>>>> rest of the function only manage adding stuff I change a bit for updating
>>>> stuff, for the first table (maybe for nothing), but it needs to destruct
>>>> records in the referenced table so I need to code that.
>>>>
>>>> Richard
>>>>
>>>> On Thu, May 31, 2012 at 12:25 PM, Richard Vézina <[email protected]
>>>> <javascript:>> wrote:
>>>>
>>>>> response.js will not works, it only works on response and for
>>>>> component as says the book.
>>>>>
>>>>> Putting the js code into the view seems to work if I pass the
>>>>> photos_files var to the view...
>>>>>
>>>>> Now I think I just have to find the way to expose the HTML, XML() not
>>>>> seems to work.
>>>>>
>>>>> Richard
>>>>>
>>>>>
>>>>> On Thu, May 31, 2012 at 12:09 PM, Richard Vézina <
>>>>> [email protected] <javascript:>> wrote:
>>>>>
>>>>>> Hello Paolo,
>>>>>>
>>>>>> Here some fresher code :
>>>>>>
>>>>>> def trip_update():
>>>>>> # only SQLFORM.factory tested
>>>>>> form=SQLFORM.factory(db.t_trip, db.t_photos)
>>>>>> for row in db(db.t_trip.id == request.args(0)).select(db.t_
>>>>>> trip.ALL):
>>>>>> for f in db.t_trip.fields:
>>>>>> form.vars[f]=row[f]
>>>>>> photos_files = []
>>>>>> for row in db(db.t_photos.f_trip_ref ==
>>>>>> request.args(0)).select(db.t_photos.ALL):
>>>>>> #for f in db.t_photos.fields:
>>>>>> #f_photo_0:CONTENT_OF_f_title
>>>>>> #form.vars['f_photo_'+str(i)+':'+row.f_title]=row
>>>>>> #LI(_title='couleurs (1).png', A('x',
>>>>>> _href='javascript:void(0);', _class='mw_delItem', _title='remove this
>>>>>> file'), I(B(EM(_class='mw_file-ext-png'))), SPAN('test1'))
>>>>>> photos_files.append(XML(LI(A('x',
>>>>>> _href='javascript:void(0);', _class='mw_delItem', _title='remove this
>>>>>> file'), EM(_class='mw_file-ext-png'), SPAN(row.f_title),
>>>>>> _title=row.f_photo)))
>>>>>> response.js="""var photos_files_list = "{{=photos_files}}"
>>>>>> $(document).ready( function () {
>>>>>> if(photos_files_list != 'None') {
>>>>>> $.each(photos_files_list, function(i, val) {
>>>>>> $('ul.mw_list').append(photos_files_list[i]);
>>>>>> });
>>>>>> };
>>>>>> });"""
>>>>>> #A(T('Access'),_href=URL(r=request,f='read',args=(
>>>>>> request.args(0),str(id))))
>>>>>>
>>>>>> #<li title="couleurs (1).png"><a class="mw_delItem"
>>>>>> href="javascript:void(0);" title="remove this file">x</a><i><b><em
>>>>>> class="mw_file-ext-png"></em></b></i><span>test1</span></li>
>>>>>> if form.accepts(request, session, onvalidation=lambda
>>>>>> form:check(form)): # Is it possible to use onvalidation with
>>>>>> form.process()
>>>>>> syntax ?
>>>>>> trip_id = db.t_trip.update_record(**db.
>>>>>> t_trip._filter_fields(form.vars))
>>>>>> nfiles = 0
>>>>>> for var in request.vars:
>>>>>> if var.startswith('f_photo') and request.vars[var] != '':
>>>>>> uploaded = request.vars[var]
>>>>>> if isinstance(uploaded,list):
>>>>>> # files uploaded through input with "multiple"
>>>>>> attribute set on true
>>>>>> counter=0
>>>>>> for element in uploaded:
>>>>>> counter += 1
>>>>>> nfiles += 1
>>>>>> file_title = element.name.split(":")[-1] #
>>>>>> TODO: could this be made better?
>>>>>> # I
>>>>>> mean, the title must be appended to element's name
>>>>>> # or
>>>>>> is there another way?
>>>>>> db.t_photos.insert(
>>>>>> f_trip_ref=trip_id,
>>>>>> f_title=file_title+" ("+str(counter)+")"
>>>>>> if file_title!="" else file_title,
>>>>>> f_photo=db.t_photos.f_photo.
>>>>>> store(element.file,element.filename))
>>>>>> else:
>>>>>> # only one file uploaded
>>>>>> element = request.vars[var]
>>>>>> nfiles += 1
>>>>>> db.t_photos.insert(
>>>>>> f_trip_ref=trip_id,
>>>>>> f_title=element.name.split(":")[-1],
>>>>>> f_photo=db.t_photos.f_photo.
>>>>>> store(element.file,element.filename))
>>>>>>
>>>>>> session.flash = T('%s photo%s uploaded'%(nfiles, 's' if
>>>>>> nfiles>1 else ''))
>>>>>> redirect(URL('trip_read'))
>>>>>>
>>>>>> if isinstance(form,FORM):
>>>>>> # hide f_title form's row. Is there a better way to
>>>>>> accomplish it?
>>>>>> del form[0][3]
>>>>>>
>>>>>> return dict(form=form)
>>>>>>
>>>>>> On Wed, May 30, 2012 at 6:23 PM, Paolo Caruccio <
>>>>>> [email protected] <javascript:>> wrote:
>>>>>>
>>>>>>> Richard,
>>>>>>>
>>>>>>> I saw your email in the discussion regarding bootswatch, but I want
>>>>>>> to answer here for competence.
>>>>>>>
>>>>>>> Multiupload is a my old project. The object of the toy app was
>>>>>>> demonstrate the usage of multiupload control. It wasn't a complete
>>>>>>> application.
>>>>>>>
>>>>>>> Your intentions, however, are interesting. I will take a look at
>>>>>>> your code and I will try to find a solution.
>>>>>>>
>>>>>>>
>>>>>>> Il giorno mercoledì 30 maggio 2012 16:15:09 UTC+2, Richard ha
>>>>>>> scritto:
>>>>>>>
>>>>>>>> Hello Paolo,
>>>>>>>>
>>>>>>>> Pretty nice!
>>>>>>>>
>>>>>>>> Did you implement the update of the records also?
>>>>>>>>
>>>>>>>> Is it a straight and easy task or it becomes trickier to implement
>>>>>>>> than the rest of the app??
>>>>>>>>
>>>>>>>> Richard
>>>>>>>>
>>>>>>>> On Sat, Oct 29, 2011 at 6:21 PM, Paolo Caruccio <
>>>>>>>> [email protected] <javascript:>> wrote:
>>>>>>>>
>>>>>>>>> Bruno,
>>>>>>>>>
>>>>>>>>> thanks.
>>>>>>>>>
>>>>>>>>> What do you think about the upload mechanism? Can it be translate
>>>>>>>>> in a web2py widget? or is it better to use a different
>>>>>>>>> javascript/jquery
>>>>>>>>> library?
>>>>>>>>>
>>>>>>>>> Regards.
>>>>>>>>>
>>>>>>>>> Paolo
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>
>>>>
>>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.