Hi I am using tinmymce in laravel5. I create blogposts where i need to display code snippets.
for example i want to display this bit of code snippet <meta http-equiv="X-UA-Compatible" content="IE=edge"> and here is my source code as seen in tinymce:
<pre><code><meta http-equiv="X-UA-Compatible" content="IE=edge"></code></pre>
And this is how it is saved in my database:
<pre><code><meta http-equiv="X-UA-Compatible" content="IE=edge"></code></pre>
The problem is when i pull that data to edit in my view using the same tinymce editor
I see nothing, its blank. if i check the source code all is left there is <pre></pre>
Here is my create page:
#extends('layouts.app')
#section('content')
<section class="articles-show">
<div class="container">
<div class="row">
<div class="col-sm-10 articles-page">
<h1>Create Article</h1>
{{-- #if (Auth::user()->isAuthor() || Auth::user()->isAdmin()) --}}
{!! Form::open(['method' => 'POST', 'action' => 'ArticlesController#store', 'files' => true]) !!}
#include('partials.error-message')
<div class="form-group">
{!! Form::label("title", "Title:") !!}
{!! Form::text("title", null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label("body", "Body:") !!}
{!! Form::textarea("body", null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('photo_id', 'Featured Image:') !!}
{!! Form::file('photo_id', array('class' => 'form-control')) !!}
</div>
<div class="form-group">
{!! Form::label("category_id", "Category:") !!}
{!! Form::select("category_id[]", $categories, null, ['id' => 'tag_list', 'class' => 'form-control', 'multiple']) !!}
</div>
<div class="form-group">
{!! Form::label("meta_desc", "Meta Description:") !!}
{!! Form::text("meta_desc", null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::submit("Create Article", ['class' => 'btn btn-primary']) !!}
</div>
{!! Form::close() !!}
{{-- #endif --}}
</div>
<div class="col-sm-2 articles-page">
{!! Form::open(['method' => 'POST', 'action' => 'CategoryController#store']) !!}
<br>
<div class="form-group">
{!! Form::label("name", "Category Name:") !!}
{!! Form::text("name", null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::submit("Create Category", ['class' => 'btn btn-primary']) !!}
</div>
{!! Form::close() !!}
</div>
</div>
</div>
</section>
#include('partials.select-2-script')
#include('partials.tinymceScript')
#endsection
Here is my edit page:
#extends('layouts.app')
#section('content')
#section('content')
<section class="articles-show">
<div class="container">
<div class="row">
<div class="col-sm-10 articles-page">
<h1>Create Article</h1>
{!! Form::model($article, ['method' => 'PATCH', 'action' => ['ArticlesController#update', $article->id], 'files' => true]) !!}
#include('partials.error-message')
<div class="form-group">
{!! Form::label("title", "Title:") !!}
{!! Form::text("title", null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label("body", "Body:") !!}
{!! Form::textarea("body", null, ['id' => 'mytextarea', 'class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('photo_id', 'Featured Image:') !!}
{!! Form::file('photo_id', array('class' => 'form-control')) !!}
</div>
<div class="form-group">
{!! Form::label("category_id", "Category:") !!}
{!! Form::select("category_id[]", $categories, null, ['id' => 'tag_list', 'class' => 'form-control', 'multiple']) !!}
</div>
<div class="form-group">
{!! Form::label("meta_desc", "Meta Description:") !!}
{!! Form::text("meta_desc", null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::submit("Edit Article", ['class' => 'btn btn-primary']) !!}
</div>
{!! Form::close() !!}
{!! Form::open(['method' => 'DELETE', 'action' => ['ArticlesController#destroy', $article->id]]) !!}
<div class="form-group">
{!! Form::submit("Delete Article", ['class' => 'btn btn-danger']) !!}
</div>
{!! Form::close() !!}
</div>
<div class="col-sm-2 articles-page">
{!! Form::open(['method' => 'POST', 'action' => 'CategoryController#store', 'files' => true]) !!}
<br>
<div class="form-group">
{!! Form::label("name", "Category Name:") !!}
{!! Form::text("name", null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::submit("Create Category", ['class' => 'btn btn-primary']) !!}
</div>
{!! Form::close() !!}
</div>
</div>
</div>
</section>
#include('partials.select-2-script')
#include('partials.tinymceScript')
#endsection
and here is my tinymce script page that is in partials which i have included in create and edit pages:
<script src="http://code.jquery.com/jquery.js"></script>
<script src="//cdn.tinymce.com/4/tinymce.min.js"></script>
<script>
var editor_config = {
path_absolute : "{{ URL::to('/') }}/",
selector: "textarea",
//entities : "60,lt,62,gt,38,amp",
// entity_encoding: "raw",
plugins: [
"advlist autolink lists link image charmap print preview hr anchor pagebreak",
"searchreplace wordcount visualblocks visualchars code fullscreen",
"insertdatetime media nonbreaking save table contextmenu directionality",
"emoticons template paste textcolor colorpicker textpattern spellchecker"
],
toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image media | spellchecker",
menubar: "tools",
relative_urls: false,
file_browser_callback : function(field_name, url, type, win) {
var x = window.innerWidth || document.documentElement.clientWidth || document.getElementsByTagName('body')[0].clientWidth;
var y = window.innerHeight|| document.documentElement.clientHeight|| document.getElementsByTagName('body')[0].clientHeight;
var cmsURL = editor_config.path_absolute + 'laravel-filemanager?field_name=' + field_name;
if (type == 'image') {
cmsURL = cmsURL + "&type=Images";
} else {
cmsURL = cmsURL + "&type=Files";
}
tinyMCE.activeEditor.windowManager.open({
file : cmsURL,
title : 'Filemanager',
width : x * 0.8,
height : y * 0.8,
resizable : "yes",
close_previous : "no"
});
}
};
tinymce.init(editor_config);
<!-- -->
</script>
I have searched everywhere, tried everything posted in tinymce forums etc. Stackoverflow is my last hope :)
Use :
{!! $varable !!}
this will echo the value for Html engine and Tinymce
Don't use:
{{$variable}}
I've spent half a day trying to solve it and finally I've figured out that here is the problem with textarea and Blade, not with tinyMCE. If you are using something like
<textarea calss="js-wysiwyg">
{{ $blog->text }}
</textarea>
and the blog text contains some html tags like <pre>, <input> or <form>, textarea will do a bit of magic with it and after tinyMCE initializing you will end up with very strange output (nothing outputted in your case and rendered html input in mine :) ). So, you have 2 different options:
<textarea calss="js-wysiwyg">
{{ htmlentities($blog->text) }}
</textarea>
or
<div contenteditable="true" calss="js-wysiwyg">
{{ $blog->text }}
</div>
Variant with htmlentities is better because you don't need to create some jQuery solution for passing value of the div in request (because divs don't have 'name' attributes)
Hope this will help someone!
Related
I work with Symfony to build and send a contact form by mail.
I use swiftMailer.
The problem is that my form is not submitted.
So, my swiftmailer can't work because the isSumbitted will stay at false and $mailer->send(message) will not be activate
My controller :
public function index (Request $request, Swift_Mailer $mailer)
{
$form = $this->createForm(ContactType::class);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$contactData = $form->getData();
$name = $contactData['name'];
$content = $contactData['message'];
$email = $contactData['email'];
$entreprise = $contactData['entreprise'];
$zip = $contactData['zip'];
$message = (new Swift_Message('Vous avez un nouveau message sur le site AMC Industrie.fr'))
->setFrom('test#example.com')
->setTo('test#gmail.com')
->setSubject('Demande d\'information')
->setCharset('utf-8')
->setContentType('text/html')
->setBody(
"
<p> Vous avez reçu un message de <strong>$name</strong>, de l'entreprise <strong>$entreprise</strong>
<br>(code postal : $zip ) <br>
Son email est : <strong>$email</strong>. </p>
<p> Son message :</p>
<p>$content
</p>
"
)
;
$mailer->send($message);
return $this->redirectToRoute('map_contact');
}
return $this->render('contact/map_contact.html.twig', [
'form' => $form->createView()
]);
}
My Form :
{
$builder
->add('name',TextType::class,
['label'=>false,
'constraints' => new NotBlank,
'attr' => [
'class'=> 'form-control',
'placeholder' => 'Nom et prénom',
]
])
->add('email',EmailType::class,
['label'=>false,
'constraints' => new NotBlank,
'attr' => [
'class' => 'form-control',
'placeholder' => 'adresse e-mail'
]
])
->add('entreprise',TextType::class,
['label'=>false,
'constraints' => new NotBlank,
'attr' => [
'class'=> 'form-control',
'placeholder' => 'Nom de votre entreprise'
]
])
->add('zip',NumberType::class,
['label'=>false,
'constraints' => new NotBlank,
'attr' => [
'class'=> 'form-control',
'placeholder' => 'Code postal'
]
])
->add('message',TextareaType::class,
['label'=>false,
'constraints' => new NotBlank,
'attr' => [
'class'=> 'form-control',
'placeholder' => 'Décrivez-nous votre projet'
]
])
->add('save', SubmitType::class,
['label' => 'Envoyer',
'attr'=> [
//'class' => 'waves-effect waves-light btn-large btn btn-primary mt-1 mb-5 lift',
'id' => 'form-submit'
]])
;
}
My template :
<form>
{{ form_start(form) }}
<div class="row">
<div class="col-12 col-md-6">
<div class="form-group mb-5">
{{form_label(form.name, 'Nom et prénom')}}
{{form_widget(form.name)}}
</div>
</div>
<div class="col-12 col-md-6">
<div class="form-group mb-5">
{{form_label(form.email, 'Email') }}
{{form_widget(form.email)}}
</div>
<div class="col-12 col-md-6">
<div class="form-group mb-5">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12 col-md-6">
<div class="form-group mb-5">
{{form_label(form.entreprise, 'Entreprise')}}
{{form_widget(form.entreprise)}}
</div>
</div>
<div class="col-12 col-md-6">
<div class="form-group mb-5">
{{form_label(form.zip, 'Code Postal')}}
{{form_widget(form.zip)}}
</div>
<div class="col-12 col-md-6">
<div class="form-group mb-5">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-group">
{{form_label(form.message, 'Comment pouvons-nous vous aider ?')}}
{{form_widget(form.message)}}
</div>
</div>
</div> <!-- / .row -->
<div class="row justify-content-center">
<div class="col-auto py-5">
<!-- Submit -->
<div>
{{form_widget(form.save)}}
</div>
</div>
</div>
{{ form_end(form) }}
</form>
My debug tool :
Form in get parameter OK. I have all my input with informations.
Debug tool - get parameters:
BUT
there is not sumbitted data. form is not submit
debug tool - form is not submit:
I don't understand where is my problem.
Ok, it's resolved !
The problem : I already have a html balise for my form, in my template.
When I delete , it's ok !
when creating the register page I am trying to pass in an array from the database ('id' and 'name') into a select field box on the register form but it wont display anything, its really bazar, when I inspect it in the browser I can see the div container and all of the options correctly in proper fields but for some reason there is no select field (total not visible in the browser) lol, I tried it with hard coded values and values from db and nothing is getting the select field to work, any help is greatly appreciated!
login.blade.php
#extends('layouts.main')
#section('content')
<div class="page-footer" id="contactus">
<div class="container">
<div class="row" align="center">
<div class="col 16 s12">
<h4 class="black-text">Account Center</h4>
</div>
</div>
<div class="row" style="margin-bottom: 0px;">
<div class="col 16 s12 m6" align="center">
<h5 class="black-text">Login</h5>
{!! Form::open(['method'=>'POST', 'action'=>'UsersController#store', 'class'=>'pure-form pure-form-stacked']) !!}
<br/>
<div class="input-field">
<i class="material-icons prefix fa fa-at"></i>
{!! Form::label('loginEmail', 'E-mail') !!}
{!! Form::email('loginEmail', null, ['class'=>'form-control'])!!}
</div>
<div class="input-field">
<i class="material-icons prefix fa fa-key"></i>
{!! Form::label('loginPassword', 'Password') !!}
{!! Form::password('loginPassword', ['class'=>'form-control'])!!}
</div>
<div class="form-group">
{!! Form::button('<i class="material-icons left fa fa-send"></i>Login', ['type' => 'submit', 'class'=>'waves-effect waves-light btn']) !!}
</div>
{!! Form::close() !!}
<br/><br/>
</div>
<div class="col 16 s12 m6" align="center">
<h5 class="black-text">Register</h5>
{!! Form::open(['method'=>'POST', 'action'=>'UsersController#store', 'class'=>'pure-form pure-form-stacked']) !!}
<br/>
<div class="input-field">
<i class="material-icons prefix fa fa-at"></i>
{!! Form::label('registerEmail', 'E-mail') !!}
{!! Form::email('registerEmail', null, ['class'=>'form-control'])!!}
</div>
<div class="input-field">
<i class="material-icons prefix fa fa-key"></i>
{!! Form::label('registerPassword', 'Password') !!}
{!! Form::password('registerPassword', ['class'=>'form-control'])!!}
</div>
<div class="input-field">
<i class="material-icons prefix fa fa-key"></i>
{!! Form::label('confirm', 'Confirm Password') !!}
{!! Form::password('confirm', ['class'=>'form-control'])!!}
</div>
<div class="input-field">
<i class="material-icons prefix fa fa-building"></i>
{!! Form::label('role_id', 'Role') !!}
</br>
{!! Form::select('role_id', [''=>'Choose Option'] + $organizationTypes, null, ['class'=>'form-control', 'style'=>' resize:vertical; ', 'id' => 'industryId'])!!}
</div>
</br>
</br>
</br>
</br>
<div class="input-field">
<i class="material-icons prefix fa fa-building"></i>
{!! Form::label('organizationName', 'Organization Name') !!}
{!! Form::password('organizationName', ['class'=>'form-control'])!!}
</div>
<div class="form-group">
{!! Form::button('<i class="material-icons left fa fa-send"></i>Register', ['type' => 'submit', 'class'=>'waves-effect waves-light btn']) !!}
</div>
{!! Form::close() !!}
<!-- loading spinner -->
<div class="preloader-wrapper active" id="sendEmailLoader">
<div class="spinner-layer spinner-yellow-only">
<div class="circle-clipper left">
<div class="circle"></div>
</div>
<div class="gap-patch">
<div class="circle"></div>
</div>
<div class="circle-clipper right">
<div class="circle"></div>
</div>
</div>
</div>
<!-- end loader -->
</form>
<br/><br/>
</div>
</div>
</div>
</div>
#endsection
AuthController.php
<?php
namespace App\Http\Controllers\Auth;
use App\OrganizationType;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller
{
/*
|--------------------------------------------------------------------------
| Registration & Login Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users, as well as the
| authentication of existing users. By default, this controller uses
| a simple trait to add these behaviors. Why don't you explore it?
|
*/
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
/**
* Where to redirect users after login / registration.
*
* #var string
*/
protected $redirectTo = '/users';
/**
* Create a new authentication controller instance.
*
* #return void
*/
public function __construct()
{
$this->middleware($this->guestMiddleware(), ['except' => 'logout']);
}
/**
* Get a validator for an incoming registration request.
*
* #param array $data
* #return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'email' => 'required|email|max:255|unique:users',
'password' => array(
'required',
'min:6',
'confirmed',
'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$/'
),
'organizationType' => 'required',
'organizationName' => 'required|max:255',
]);
}
/**
* Create a new user instance after a valid registration.
*
* #param array $data
* #return User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
public function getLogin()
{
//
$organizationTypes = OrganizationType::lists('name','id')->all();
//return $organizationTypes;
return view('auth.login', compact('organizationTypes'));
}
}
routes.php
Route::get('/login', 'Auth\AuthController#getLogin');
method lists() is deprecated, use pluck() instead.
to get your select do this:
In your controller first change lists() to pluck() (i hope you have laravel version 5.2+)
$organizationTypes = OrganizationType::pluck('name','id')->toArray();
and in view do this
{!! Form::select('role_id', $organizationTypes, null, ['class'=>'form-control'])!!}
update
OK you are using css template materialize and because of template you need to append right class for select box...this will work but probably needs some other classes too:
{!! Form::select('role_id', $organizationTypes, null, ['class' => 'browser-default', 'placeholder' => 'Choose Option'])!!}
{!! Form::label('role_id', 'Organization name') !!}
I have created a form where a user can add elements depending on the number of names needed. My code is as follows
<div class="input_fields_wrap">
<div class="row">
<div class="form-group col-xs-12 col-sm-3 form-group-sm">
{!! form::label('first_name[]', 'First Name: ') !!}
{{--{!! form::text('first_name[]', null, ['class' => 'form-control', 'placeholder' => 'First Name']) !!}--}}
<input type="text" name="first_name[]" value="" class="form-control" placeholder="First Name">
</div>
<div class="form-group col-xs-12 col-sm-3 form-group-sm">
{!! form::label('middle_name[]', 'Middle Name[s]: ') !!}
{{--{!! form::text('middle_name[]', null, ['class' => 'form-control', 'placeholder' => 'Middle Name[s]']) !!}--}}
<input type="text" name="middle_name[]" value="" class="form-control" placeholder="Middle Name[s]">
</div>
<div class="form-group col-xs-12 col-sm-3 form-group-sm">
{!! form::label('last_name[]', 'Last Name: ') !!}
{{--{!! form::text('last_name[]', null, ['class' => 'form-control', 'placeholder' => 'Last Name']) !!}--}}
<input type="text" name=last_name[]" value="" class="form-control" placeholder="Last Name">
</div>
</div>
</div>
<button class="btn btn-success add_field_button"><i class="fa fa-user"></i> Add Another Person (Max 5)</button>
When the form fails it's validation it should return to the original form, display validation errors and re-populate the form.
Obviously this needs to loop though the returned values but I am unable to get the returned form content for these elements.
I can dump out the errors but not sure how to get the returned form element values :(
My register.blade.php file -
{{ Form::open(array('url'=>'register'))}}
{{ Form::label('email','Email Address')}}
{{ Form::text('email')}}
{{ Form::label('username','Username')}}
{{ Form::text('username')}}
{{ Form::label('password','Password')}}
{{ Form::password('password')}}
{{ Form::submit('Sign up')}}
{{ Form::close()}}
But I have get raw html form on bowser window with html tags i.e form not created
In Laravel 5 the blades changed. You need to use {!! !!} if you want to post unescaped text
{!! Form::open(array('url'=>'register')) !!}
{!! Form::label('email','Email Address') !!}
{!! Form::text('email') !!}
{!! Form::label('username','Username') !!}
{!! Form::text('username') !!}
{!! Form::label('password','Password') !!}
{!! Form::password('password') !!}
{!! Form::submit('Sign up') !!}
{!! Form::close() !!}
*I speak English not well. So i'm going to post the code now.*
Form code:
protected $elementDecorators = array('ViewHelper','Errors','Description','Label',
array('HtmlTag',array('tag' => 'div','class' => '_wrapperElement')
));
public function init(){
$this->addElement('text','mytext',array(
'class' => '_inputText',
'label' => 'Mytext',
'required' => true,
'decorators' => $this->elementDecorators
));
$this->setDecorators(array('FormElements',array('HtmlTag',array('tag' => 'div','class' => '_formWrapper')),'Form'));
}
Output:
<form method="post" action="" enctype="application/x-www-form-urlencoded">
<div class="_formWrapper">
<div class="_wrapperElement">
<label class="required" for="mytext">Mytext</label>
<input type="text" class="_inputText" value="" id="mytext" name="mytext">
</div>
</div>
</form>
Now i want a div wraps Label and Input element like this:
<form method="post" action="" enctype="application/x-www-form-urlencoded">
<div class="_formWrapper">
<div class="_wrapperElement">
<div class="_wrapperLabel">
<label class="required" for="mytext">Mytext</label>
</div>
<div class="_wrapperInput">
<input type="text" class="_inputText" value="" id="mytext" name="mytext">
</div>
</div>
</div>
</form>
How to do that?
I tried many times but i can't do it.
Thanks!
protected $elementDecorators = array('ViewHelper','Errors','Description', array('Label', array('tag' => 'div', 'class' => '_wrapperLabel')
),
array('HtmlTag',array('tag' => 'div','class' => '_wrapperInput')
));
i found the solution that render decorators to ViewScript.