Interview Prepartion, Uncategorized

MySql Notes

1. default current timestamp
`publish_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
2. alter table add column
ALTER TABLE users ADD column verify_token varchar(255)
3. `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Interview Prepartion, Uncategorized

Laravel Notes

1. create view with specific path
 ref : https://stackoverflow.com/questions/31935417/how-to-use-artisan-to-make-views-in-laravel-5-1#:~:text=Laravel%20officially%20doesn't%20have%20any%20Artisan%20cammands%20for%20views.&text=There%20is%20very%20easy%20way,using%20Laravel%20More%20Command%20Package.&text=Thank%20you.&text=%2Dr%20is%20a%20shorthand%20for,or%20shorthand%20to%20make%20resource.

 - composer require theanik/laravel-more-command --dev
 - php artisan make:view user/index
 
2. laravel create controller command
	- php artisan make:controller UserController
	- create controller inside subfolder
	- controller codes
	*******************
	public function create()
    {
        $data['templatecategory'] = Templatecategory::active()->orderBy('title', 'ASC')->get()->toArray();
        return view('admin.template.create', $data);
    }
	
	public function store(Request $request)
    {
	$template = new Template();

        $slug = Str::slug($request->title);
        sc:
        $slugcount = Template::where('slug', $slug)->count();
        if ($slugcount > 0) {
            $slug = $slug . '-1';
            goto sc;
        }
        /* if ($slugcount < 1)
            return $slug; */
        $template->title = $request->title;
        $template->slug = $slug;
        $template->locale = $locale;
        $template->pointslug = $slug;
        $template->image = $request->image;
        $template->content = $request->content;
        $template->category = (!empty($request->category))?json_encode($request->category):'[]';
        $template->meta_description = $request->meta_description;
        $template->meta_keywords = $request->meta_keywords;
        $template->analytics = $request->analytics;
        $template->status = $request->status;

        $template->save();
	}
	
	*******************

3. route
	- Route::get('/loaddesign', [App\Http\Controllers\Admin\AdminController::class, 'loaddesign']);
	
4. form gallery input
	- copy below code
	**************************
	...
	<div class="form-group">
		@include('admin.gallery.inc.mediainput',['name'=>'image','sizemessage'=>'600 x 400'])
	</div>
	..
	@include('admin.gallery.inc.gallerymodal')
	..
	@include('admin.gallery.inc.mediascript',['name'=>'image'])
	***************************
	- for edit
	**************
	@include('admin.gallery.inc.mediainput',['name'=>'image','edit'=>true,'sizemessage'=>'600 x 400','value'=>$form['image']])
	**************
5. include tinyscripts
	- copy below code
	************************
	<div class="form-group">
		<label for="content">Content</label>
		<textarea class="form-control tinyarea required" id="content" name="content"
			placeholder="Enter Content" data-empty="Enter Content"></textarea>
	</div>
6. 	laravel make model command
	- php artisan make:model Models/ModelName 

7. migrartion creation command
	- php artisan make:migration create_users_table --path=/path/to/your/migration/directory
	- php artisan migrate --path=database\migrations\form\2023_09_20_181502_create_form_table.php
	- migration code
	**********************
	Schema::create('form', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->string('image');
            $table->string('slug');
            $table->string('email');
            $table->text('content')->nullable();
            $table->string('file');
            $table->timestamps();
        });
	***********************

8. File upload code
	- copy below code
	******************
	if ($request->hasFile('file')) {
            //  Let's do everything here
            if ($request->file('file')->isValid()) {
                //

                $file = $request->file('file');
                $filename = ($request->name != '') ? $request->name : time();

                $name = $filename . '.' . $file->getClientOriginalExtension();
                $destinationPath = public_path('/formfile');
                $file->move($destinationPath, $name);
                $template->file = $name;
            }
        }
	******************
	
9. slug code
	- copy below code
	*******************
	use Illuminate\Support\Str;
	....
	$slug = Str::slug($request->title);
        sc:
        $slugcount = Form::where('slug', $slug)->count();
        if ($slugcount > 0) {
            $slug = $slug . '-1';
            goto sc;
        }
	*****************
10. message alert
	- copy below code
	*******************
	@if ($errors->any())
	<div class="alert alert-danger">
		<ul>
			@foreach ($errors->all() as $error)
			<li>{{ $error }}</li>
			@endforeach
		</ul>
	</div>
	@endif
	@if(session()->has('message.level'))
	<div class="alert {{ session('message.level') }}">
		{!! session('message.content') !!}
		<button type="button" class="close" data-dismiss="alert" aria-label="Close">
			<span aria-hidden="true">&times;</span>
		</button>
	</div>
	@endif
	****************
11. laravel mail
	ref : https://laravel.com/docs/8.x/mail
	https://www.itsolutionstuff.com/post/laravel-10-mail-laravel-10-send-mail-tutorialexample.html
	- php artisan make:mail OrderShipped
	- use below code
	*******************
	public $mailData;
	public function __construct($mailData)
    {
        $this->mailData = $mailData;
    }
	...
	public function build()
	{
		return $this->from('example@example.com', 'Example')
					->view('emails.orders.shipped',$this->mailData);
	}
	- in mail controller code
	***************
	use Mail;
	use App\Mail\FormEmail;
	...
	Mail::to('ramkankannan@gmail.com')->send(new FormEmail($mailData));
	*******************
12. pagination
	- in controller
	*******************
	 $data['form'] = Form::paginate(3);
	*******************
	- in view
	******************
	{{$form->appends(request()->input())->links('pagination.admin')}}
	******************
	 

	
	
Codeigniter, Interview Prepartion

Pagination in Codeigniter

Add below code in controller

<?php
$data["newstotal"] = $this->news_model->list();
// print_r($data['newstotal']);
//pagination
$rec_limit = 2;
$total_page = ceil(count($data["newstotal"]) / $rec_limit);
if (isset($_GET["page"])) {
    $page = $_GET["page"];
    $pageoff = $page - 1;
    $offset = $rec_limit * $pageoff;
} else {
    $page = 1;
    $offset = 0;
}
$data["news"] = $this->news_model->list($offset, $rec_limit);
?>

Add below code in view

<?php
//$current_page = ($offset / 2) + 1;
echo "<div class='paging text-center'>";
echo "<a href = \"?page=1\" class='btn btn-default'><<</a>";
for ($p = 5; $p > 1; $p--) {
    $prev = $current_page + 1 - $p;
    if ($prev > 0) {
        echo "<a href = \"?page=$prev\" class='btn btn-default'>$prev</a>";
    }
}

echo "<a href = \"?page=$current_page\" class='btn btn-primary'>$current_page</a>";
for ($p = 1; $p < 5; $p++) {
    $next = $current_page + $p;
    if ($next <= $total_page) {
        echo "<a href = \"?page=$next\" class='btn btn-default'>$next</a>";
    }
}
echo "<a href = \"?page=$total_page\" class='btn btn-default'>>></a>";
echo "</div>";
?>

In model

public function list($offset=null,$limit=null){
    $this->db->select('*');
    $this->db->from('news');
    $this->db->order_by('created_at','desc');
    if($offset!==null)
    {
        $this->db->limit($limit,$offset);
    }
    //$this->db->where($field, $value);
    $query = $this->db->get();
    if ($query->num_rows() > 0) {
        $row = $query->result_array();
        return $row;
    } else {
        return [];
    }
}

AJAX Pagination

$('body').on('click','.ajaxpagination .paging .btn',function(e){
        e.preventDefault();
        var dataurl = $(this).attr('href');
        var search = $('#templatesearch [name="search"]').val();
        if (typeof dataurl !== 'undefined' && dataurl !== false) {
            var result = $.ajax({
                data: {'search':search},
                url: dataurl,
                type: "GET",
                datatype: "html",
                success: function(data) {
                    $('#designModal .modal-body').html(data);
                },
                error: function(xhr, status, error) {
        
                }
            });
        }
    });
Interview Prepartion, Uncategorized

WordPress Notes

1. Enque css and js
- copy below code
***********************
add_action( 'wp_enqueue_scripts', 'add_frontend_css' );

function add_frontend_css() {
//css
wp_enqueue_style( 'bootstrap', get_template_directory_uri() . '/frontend/css/bootstrap.min.css', false, '1.1', 'all');
wp_enqueue_style( 'font', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css', false, '1.1', 'all');
wp_enqueue_style( 'tinyslider', get_template_directory_uri() . '/frontend/css/tiny-slider.css', false, '1.1', 'all');
wp_enqueue_style( 'frontendstyle', get_template_directory_uri() . '/frontend/css/style.css', false, '1.1', 'all');

//js
/* wp_enqueue_script( 'bootstrap', get_template_directory_uri() . '/frontend/js/bootstrap.bundle.min.js', array( 'jquery' ));
wp_enqueue_script( 'tinyslider', get_template_directory_uri() . '/frontend/js/tiny-slider.js', array( 'jquery' ));
wp_enqueue_script( 'custom', get_template_directory_uri() . '/frontend/js/custom.js', array( 'jquery' )); */
}
/**************** */
- add script at footer
- footer.php
****************
?php%20site_url();%20?/wp-content/themes/mytheme/frontend/js/bootstrap.bundle.min.js
*****************
2. Menu
- Install menudesign plugin
- add menu class sample
- in menuid
- menu1 //it is id of menu #menu1
- in menu class
- .menu-item-has-children //it is class of element . important need to add space as first letter
- in menu add class
- custom-navbar-nav navbar-nav ms-auto mb-2 mb-md-0
- frontend code
******************
<?php echo do_shortcode("[mymenu location='primary' menuid='menu1']"); ?>
*******************
3. Plugins Needed for Interview
- bootstrap
- menudesign
- misha image upload
- addwidget
- custom post
- mytheme Theme
- Third party plugins
- contactform 7
- additional header
- Reply-To: [your-email]
- from
- [_site_title] [your-email]
- Contact Form Entries
- Post SMTP
4. Create admin page and form
- Add admin menu code
/*****Add Main Menu with Seperate Page Script***/
add_action( 'admin_menu', 'my_form' );

function my_form() {
add_menu_page( 'Theme Options', 'My Form', 'manage_options', 'theme-options-form-element', 'theme_general_form', 'dashicons-admin-generic', 6 );
}
/*******End Script**********/

/************Admin Page Script***********/
function theme_general_form(){
?>
<form method="post" action="options.php">
<?php wp_nonce_field('update-options') ?>
<h1>Menu Element</h1>
<div class="panel panel-default">
<div class="panel-body">
<div class="well">

<table id="menuelementpolicyTable" class="table menuelementpolicyorder-list">
<thead>
<tr>
<td>Menuid</td>
</tr>
</thead>
<tbody>

<tr>
<td class="col-sm-4">
<label for="">Form Title</label>
<input required type="text" name="formtitle" class="form-control new-option" value="<?php echo get_option('formtitle');?>"/>
<label for="">Content</label>
<?php
/***********wysiwyg editor script******************/
$settings = array( 'media_buttons' => true,'quicktags' => true );
$content =get_option( 'formcontent' );
$editor_id = 'formcontent';
wp_editor( $content, $editor_id,$settings );
/******End Script********/
?>
<label for="">Image</label>
<?php echo misha_image_uploader_field('formimage',get_option('formimage'),'back') ?>
</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>

<p><input required type="submit" class="checkoptionsubmit" name="Submit" value="Save" /></p>
<input required type="hidden" name="action" value="update" />
<input required type="hidden" name="page_options" value="formtitle,formcontent,formimage" />
</form>
<?php
}
******************
5. misha imagae
- install misha image plugin
- backend code
- use front for frontend
*******************
<?php echo misha_image_uploader_field('formimage',get_option('formimage'),'back') ?>
*******************
- get misha image url
*******************
<?php
$image_attributes = wp_get_attachment_image_src( get_option('formimage'), 'full' );
?>
<img src="<?php echo $image_attributes[0];?>" class="img-responsive" style="display:block;" />
********************
6. Widgets
- install addwidget plugin
- widget name can include space eg : Footer One and call in code without space eg: dynamic_sidebar( 'footerone' );
- Footer widget code
***********************
<?php if ( is_active_sidebar( 'first' ) ) : ?>
<div class="col-lg-4">
<?php dynamic_sidebar( 'first' ); ?>
</div>
<?php endif; ?>
************************
7. Custom Post
- install custom post plugin
- featured image enable
********************
add_theme_support( 'post-thumbnails', array( 'post', 'page', 'post_type') );
*******************
- get featured image url
*******************
<?php echo get_the_post_thumbnail_url(get_the_ID(),'medium');?>
********************
- get custom field
******************
<?php echo get_post_meta( get_the_ID(), 'sub_title', true);?>
******************
- frontend listing
******************
<?php $loop = new WP_Query( array( 'post_type' => 'my_testimonialcustom', 'posts_per_page' => 10 ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<?php the_title()?>
<?php the_content(); ?>
<?php endwhile; ?>
*******************
8. Archive page with pagination
- wp query listing
*******************
<?php
$myQuery = new WP_Query();

$cars = $myQuery->query([
'post_type' => 'my_testimonialcustom',
'posts_per_page' => 1,
'paged' => !empty($_GET['pg']) ? absint($_GET['pg']) : 1,
]);

foreach ($cars as $car) {
echo $car->post_title;
}

echo myPaginateLinks($myQuery);
?>
*********************
- functions.php add myPaginateLinks function
***********************
function myPaginateLinks( WP_Query $wp_query, $args = '' ) {
global $wp_rewrite;

// Setting up default values based on the current URL.
$pagenum_link = html_entity_decode( get_pagenum_link() );
$url_parts = explode( '?', $pagenum_link );

// Get max pages and current page out of the current query, if available.
$total = isset( $wp_query->max_num_pages ) ? $wp_query->max_num_pages : 1;
$current = !empty($_GET['pg']) ? absint($_GET['pg']) : 1;

// Append the format placeholder to the base URL.
$pagenum_link = trailingslashit( $url_parts[0] ) . '%_%';

// URL base depends on permalink settings.
$format = $wp_rewrite->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : '';
$format .= '?pg=%#%';

$defaults = array(
'base' => $pagenum_link, // http://example.com/all_posts.php%_% : %_% is replaced by format (below).
'format' => $format, // ?page=%#% : %#% is replaced by the page number.
'total' => $total,
'current' => $current,
'aria_current' => 'page',
'show_all' => false,
'prev_next' => true,
'prev_text' => __( '&laquo; Previous' ),
'next_text' => __( 'Next &raquo;' ),
'end_size' => 1,
'mid_size' => 2,
'type' => 'plain',
'add_args' => array(), // Array of query args to add.
'add_fragment' => '',
'before_page_number' => '',
'after_page_number' => '',
);

$args = wp_parse_args( $args, $defaults );

if ( ! is_array( $args['add_args'] ) ) {
$args['add_args'] = array();
}

// Merge additional query vars found in the original URL into 'add_args' array.
if ( isset( $url_parts[1] ) ) {
// Find the format argument.
$format = explode( '?', str_replace( '%_%', $args['format'], $args['base'] ) );
$format_query = isset( $format[1] ) ? $format[1] : '';
wp_parse_str( $format_query, $format_args );

// Find the query args of the requested URL.
wp_parse_str( $url_parts[1], $url_query_args );

// Remove the format argument from the array of query arguments, to avoid overwriting custom format.
foreach ( $format_args as $format_arg => $format_arg_value ) {
unset( $url_query_args[ $format_arg ] );
}

$args['add_args'] = array_merge( $args['add_args'], urlencode_deep( $url_query_args ) );
}

// Who knows what else people pass in $args.
$total = (int) $args['total'];
if ( $total < 2 ) {
return;
}
$current = (int) $args['current'];
$end_size = (int) $args['end_size']; // Out of bounds? Make it the default.
if ( $end_size < 1 ) {
$end_size = 1;
}
$mid_size = (int) $args['mid_size'];
if ( $mid_size < 0 ) {
$mid_size = 2;
}

$add_args = $args['add_args'];
$r = '';
$page_links = array();
$dots = false;

if ( $args['prev_next'] && $current && 1 < $current ) :
$link = str_replace( '%_%', 2 == $current ? '' : $args['format'], $args['base'] );
$link = str_replace( '%#%', $current - 1, $link );
if ( $add_args ) {
$link = add_query_arg( $add_args, $link );
}
$link .= $args['add_fragment'];

$page_links[] = sprintf(
'<a class="prev page-numbers" href="%s">%s</a>',
/**
* Filters the paginated links for the given archive pages.
*
* @since 3.0.0
*
* @param string $link The paginated link URL.
*/
esc_url( apply_filters( 'paginate_links', $link ) ),
$args['prev_text']
);
endif;

for ( $n = 1; $n <= $total; $n++ ) :
if ( $n == $current ) :
$page_links[] = sprintf(
'<span aria-current="%s" class="page-numbers current">%s</span>',
esc_attr( $args['aria_current'] ),
$args['before_page_number'] . number_format_i18n( $n ) . $args['after_page_number']
);

$dots = true;
else :
if ( $args['show_all'] || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) :
$link = str_replace( '%_%', 1 == $n ? '' : $args['format'], $args['base'] );
$link = str_replace( '%#%', $n, $link );
if ( $add_args ) {
$link = add_query_arg( $add_args, $link );
}
$link .= $args['add_fragment'];

$page_links[] = sprintf(
'<a class="page-numbers" href="%s">%s</a>',
/** This filter is documented in wp-includes/general-template.php */
esc_url( apply_filters( 'paginate_links', $link ) ),
$args['before_page_number'] . number_format_i18n( $n ) . $args['after_page_number']
);

$dots = true;
elseif ( $dots && ! $args['show_all'] ) :
$page_links[] = '<span class="page-numbers dots">' . __( '&hellip;' ) . '</span>';

$dots = false;
endif;
endif;
endfor;

if ( $args['prev_next'] && $current && $current < $total ) :
$link = str_replace( '%_%', $args['format'], $args['base'] );
$link = str_replace( '%#%', $current + 1, $link );
if ( $add_args ) {
$link = add_query_arg( $add_args, $link );
}
$link .= $args['add_fragment'];

$page_links[] = sprintf(
'<a class="next page-numbers" href="%s">%s</a>',
/** This filter is documented in wp-includes/general-template.php */
esc_url( apply_filters( 'paginate_links', $link ) ),
$args['next_text']
);
endif;

switch ( $args['type'] ) {
case 'array':
return $page_links;

case 'list':
$r .= "<ul class='page-numbers'>\n\t<li>";
$r .= implode( "</li>\n\t<li>", $page_links );
$r .= "</li>\n</ul>\n";
break;

default:
$r = implode( "\n", $page_links );
break;
}

/**
* Filters the HTML output of paginated links for archives.
*
* @since 5.7.0
*
* @param string $r HTML output.
* @param array $args An array of arguments. See paginate_links()
* for information on accepted arguments.
*/
$r = apply_filters( 'paginate_links_output', $r, $args );

return $r;
}
************************
Interview Prepartion, Uncategorized

Laravel Codes

laravel installation
======================
1. composer create-project laravel/laravel foldername –-prefer-dist
	- configure db .env
	- configure mail
		****************
		MAIL_MAILER=smtp
		MAIL_HOST=sandbox.smtp.mailtrap.io
		MAIL_PORT=587 
		MAIL_USERNAME=fc05f90273aa3a
		MAIL_PASSWORD=27076f56b78697
		MAIL_ENCRYPTION=tls
		MAIL_FROM_ADDRESS=ramkankannan@gmail.com
		MAIL_FROM_NAME="${APP_NAME}"
		******************
2. specifiefd key too long error 
	/app/Providers/AppServiceProvider.php
	
	******************
	use Illuminate\Support\Facades\Schema;
	
	public function boot()
	{
		Schema::defaultStringLength(191);
	}
	****************

3. php artisan migrate
4. composer require laravel/ui
5. php artisan ui bootstrap --auth
6. run "npm install && npm run dev"
7. email veirification
	ref : https://mailtrap.io/blog/laravel-email-verification/
	- add  implements MustVerifyEmail in user.php	
	- add below code in routes
	
		*********************************
		use Illuminate\Http\Request;
		use Illuminate\Foundation\Auth\EmailVerificationRequest;
		Route::get('/email/verify', function () {
			return view('auth.verify-email');
		})->middleware('auth')->name('verification.notice');
		 
		Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
			$request->fulfill();
		 
			return redirect('/home');
		})->middleware(['auth', 'signed'])->name('verification.verify');
		 
		Route::post('/email/verification-notification', function (Request $request) {
			$request->user()->sendEmailVerificationNotification();
		 
			return back()->with('message', 'Verification link sent!');
		})->middleware(['auth', 'throttle:6,1'])->name('verification.send');
		****************************************
8. User roles module
	ref : https://spatie.be/docs/laravel-permission/v5/installation-laravel
	-  composer require spatie/laravel-permission
	- add below in config/app.php
		
		***************************
		'providers' => [
			// ...
			Spatie\Permission\PermissionServiceProvider::class,
			//...
			'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
		];
		****************************
	- php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
	- php artisan config:clear
	- php artisan migrate
		if specified key too long issue came 
			modity config\database.php
			
			*****************
			'mysql' => [
			.
			'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',
			.
			]
			*******************
			
	- copy app/Http/Controllers/Admin/User folder 
	- copy resources\views\admin\user
	- add below code in app\Models\User.php
		
			*******************
			use Spatie\Permission\Traits\HasRoles;
			
			class User extends Authenticatable implements MustVerifyEmail
			{
				use HasRoles;
			*******************
	- copy resources\views\admin\layouts
	- copy resources\views\admin\permission
	- copy resources\views\admin\role
	- copy resources\views\pagination
	- copy resources\views\admin\inc
	- copy below folder for css 
		- public\assets
	- copy resources\views\auth\verify-email.blade.php
	- copy seo module
	- add below code in web.php
	 	 
	 ***********************
	 //permission
	Route::prefix('admin')->group(function () {
	// Route::group(['middleware' => ['role:Admin']], function () {
		Route::prefix('user')->group(function () {
			Route::get('/', [App\Http\Controllers\Admin\User\UserController::class, 'index']);
			Route::get('/view/{user}', [App\Http\Controllers\Admin\User\UserController::class, 'show']);
			Route::get('/assignpermission/{user}', [App\Http\Controllers\Admin\User\UserController::class, 'assignpermission']);
			Route::get('/assignpermissionadd/{user}/{permission}', [App\Http\Controllers\Admin\User\UserController::class, 'assignpermissionadd']);
			Route::get('/assignpermissionrevoke/{user}/{permission}', [App\Http\Controllers\Admin\User\UserController::class, 'assignpermissionrevoke']);

			Route::get('/assignrole/{user}', [App\Http\Controllers\Admin\User\UserController::class, 'assignrole']);
			Route::get('/assignroleadd/{user}/{role}', [App\Http\Controllers\Admin\User\UserController::class, 'assignroleadd']);
			Route::get('/assignrolerevoke/{user}/{role}', [App\Http\Controllers\Admin\User\UserController::class, 'assignrolerevoke']);
		});
		Route::prefix('role')->group(function () {
			Route::get('/', [App\Http\Controllers\Admin\User\RoleController::class, 'index']);
			Route::get('/create', [App\Http\Controllers\Admin\User\RoleController::class, 'create']);
			Route::get('/assignpermission/{role}', [App\Http\Controllers\Admin\User\RoleController::class, 'assignpermission']);
			Route::get('/assignpermissionadd/{role}/{permission}', [App\Http\Controllers\Admin\User\RoleController::class, 'assignpermissionadd']);
			Route::get('/assignpermissionrevoke/{role}/{permission}', [App\Http\Controllers\Admin\User\RoleController::class, 'assignpermissionrevoke']);
			Route::post('/', [App\Http\Controllers\Admin\User\RoleController::class, 'store']);
			Route::get('/delete/{id}', [App\Http\Controllers\Admin\User\RoleController::class, 'destroy']);
		});
		Route::prefix('permission')->group(function () {
			Route::get('/', [App\Http\Controllers\Admin\User\PermissionController::class, 'index']);
			Route::get('/create', [App\Http\Controllers\Admin\User\PermissionController::class, 'create']);
			Route::get('/assignrole/{permission}', [App\Http\Controllers\Admin\User\PermissionController::class, 'assignrole']);
			Route::get('/assignroleadd/{permission}/{role}', [App\Http\Controllers\Admin\User\PermissionController::class, 'assignroleadd']);
			Route::get('/assignrolerevoke/{permission}/{role}', [App\Http\Controllers\Admin\User\PermissionController::class, 'assignrolerevoke']);
			Route::post('/', [App\Http\Controllers\Admin\User\PermissionController::class, 'store']);
			Route::get('/delete/{id}', [App\Http\Controllers\Admin\User\PermissionController::class, 'destroy']);
		});
	});
	// });
	*****************************
9. Gallery Module
	- copy app\Http\Controllers\Admin\Gallery
	- copy app\Models\Gallery
	- copy database\migrations\gallery
		- run migrtion specifically 
		- php artisan migrate --path=/database/migrations/full_migration_file_name_migration.php
	- copy resources\views\admin\gallery
	- copy public\js\admincustom.js
	- copy public\js\gallery.js
	- copy public\css\admincustom.css
	- copy below code in routes
		******************************************
		 //gallery
		// Route::group(['middleware' => ['can:Gallery']], function () {
			Route::prefix('gallery')->group(function () {
				Route::get('/', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'index']);
				Route::post('/categorysuggestion', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'categorysuggestion']);
				Route::get('/categorysuggestion', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'categorysuggestion']);
				Route::get('/ajaxload', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'ajaxload']);
				Route::get('/create', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'create']);
				Route::get('/popup', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'popup']);
				Route::post('/add', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'store']);
				Route::post('/addcategory', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'storecategory']);
				Route::get('/ajaxloadcategory', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'ajaxloadcategory']);
				Route::get('/category', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'category']);
				Route::get('/category/add', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'addcategory']);
				// Route::post('/category/store', 'GalleryController@storecategory');
				Route::get('/category/delete/{id}', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'deletecategory']);
				Route::get('/delete/{id}', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'destroy']);
				Route::get('/ajaxinput', [App\Http\Controllers\Admin\Gallery\GalleryController::class, 'ajaxinput']);
			});
		// });
	*******************************************
10. Templates MOdule
	- copy app\Http\Controllers\Admin\Template
	- copy app\Models\Template
	- copy database\migrations\template
		- run migrations
	- copy resources\views\admin\template
	- copy resources\views\admin\design
	- copy public\tinymce
		edit css linlks for templtes css 
		- css link live and working urls
	- add below code in routes
	
	***********************************
	//template
	//Route::group(['middleware' => ['can:Template', 'setlocale']], function () {
		// Route::get('drafttemplate/{slug}', [App\Http\Controllers\Admin\Template\DraftTemplateController::class,'view'])->middleware('setlocale');
		Route::prefix('template')->group(function () {
			Route::get('/', [App\Http\Controllers\Admin\Template\TemplateController::class, 'index']);
			Route::get('/add', [App\Http\Controllers\Admin\Template\TemplateController::class, 'create']);
			Route::post('/store', [App\Http\Controllers\Admin\Template\TemplateController::class, 'store']);
			Route::post('/update', [App\Http\Controllers\Admin\Template\TemplateController::class, 'update']);
			Route::get('/edit/{pointslug}', [App\Http\Controllers\Admin\Template\TemplateController::class, 'edit']);
			Route::get('/delete/{id}', [App\Http\Controllers\Admin\Template\TemplateController::class, 'destroy']);
			Route::get('/sectiondelete/{id}', [App\Http\Controllers\Admin\Template\TemplateController::class, 'destroysection']);
			Route::get('/loaddesign', [App\Http\Controllers\Admin\Template\TemplateController::class, 'loaddesign']);
		});
		Route::prefix('drafttemplate')->group(function () {
			Route::get('/', [App\Http\Controllers\Admin\Template\DraftTemplateController::class, 'index']);
			Route::get('/add', [App\Http\Controllers\Admin\Template\DraftTemplateController::class, 'create']);
			Route::post('/store', [App\Http\Controllers\Admin\Template\DraftTemplateController::class, 'store']);
			Route::post('/update', [App\Http\Controllers\Admin\Template\DraftTemplateController::class, 'update']);
			Route::get('/edit/{pointslug}', [App\Http\Controllers\Admin\Template\DraftTemplateController::class, 'edit']);
			Route::get('/delete/{id}', [App\Http\Controllers\Admin\Template\DraftTemplateController::class, 'destroy']);
			Route::get('/sectiondelete/{id}', [App\Http\Controllers\Admin\Template\DraftTemplateController::class, 'destroysection']);
		});
		Route::prefix('templatecategory')->group(function () {
			Route::get('/', [App\Http\Controllers\Admin\Template\TemplateController::class, 'categoryindex']);
			Route::get('/add', [App\Http\Controllers\Admin\Template\TemplateController::class, 'categorycreate']);
			Route::post('/store', [App\Http\Controllers\Admin\Template\TemplateController::class, 'categorystore']);
			Route::post('/update', [App\Http\Controllers\Admin\Template\TemplateController::class, 'categoryupdate']);
			Route::get('/edit/{id}', [App\Http\Controllers\Admin\Template\TemplateController::class, 'categoryedit']);
			Route::get('/delete/{id}', [App\Http\Controllers\Admin\Template\TemplateController::class, 'categorydestroy']);
		});
	//});
	***********************
	- copy below codes in routes
		
		*********************************
		//load design
		Route::get('/loaddesign', [App\Http\Controllers\Admin\AdminController::class, 'loaddesign']);
		Route::get('/loadeledesign', [App\Http\Controllers\Admin\AdminController::class, 'loadeledesign']);
		***************************************
	- copy Controllers\Admin\AdminController
	- copy below code in routes 
		******************************
		Route::get('/setsession/{name}/{value}', [App\Http\Controllers\HomeController::class, 'setSession'])->name('setsession');
		*********************************
		
	- copy below code  app\Http\Controllers\HomeController3.php
		****************************************
		 public function setSession($name, $value)
		{
			session([$name => $value]);
		}
		**********************************
11. Design Module
	- copy app\Http\Controllers\Admin\Design
	- copy app\Models\Design
	- copy database\migrations\design
		- run migrations
	- copy resources\views\admin\design
	- copy below codes in routes
	
	*****************************************************
	//design
	// Route::group(['middleware' => ['can:Design', 'setlocale']], function () {
		// Route::get('draftdesign/{slug}', [App\Http\Controllers\Admin\Design\DraftDesignController::class,'view'])->middleware('setlocale');
		Route::prefix('design')->group(function () {
			Route::get('/', [App\Http\Controllers\Admin\Design\DesignController::class, 'index']);
			Route::get('/add', [App\Http\Controllers\Admin\Design\DesignController::class, 'create']);
			Route::post('/store', [App\Http\Controllers\Admin\Design\DesignController::class, 'store']);
			Route::post('/update', [App\Http\Controllers\Admin\Design\DesignController::class, 'update']);
			Route::get('/edit/{pointslug}', [App\Http\Controllers\Admin\Design\DesignController::class, 'edit']);
			Route::get('/delete/{id}', [App\Http\Controllers\Admin\Design\DesignController::class, 'destroy']);
			Route::get('/sectiondelete/{id}', [App\Http\Controllers\Admin\Design\DesignController::class, 'destroysection']);
			Route::get('/loaddesign', [App\Http\Controllers\Admin\Design\DesignController::class, 'loaddesign']);
		});
		Route::prefix('draftdesign')->group(function () {
			Route::get('/', [App\Http\Controllers\Admin\Design\DraftDesignController::class, 'index']);
			Route::get('/add', [App\Http\Controllers\Admin\Design\DraftDesignController::class, 'create']);
			Route::post('/store', [App\Http\Controllers\Admin\Design\DraftDesignController::class, 'store']);
			Route::post('/update', [App\Http\Controllers\Admin\Design\DraftDesignController::class, 'update']);
			Route::get('/edit/{pointslug}', [App\Http\Controllers\Admin\Design\DraftDesignController::class, 'edit']);
			Route::get('/delete/{id}', [App\Http\Controllers\Admin\Design\DraftDesignController::class, 'destroy']);
			Route::get('/sectiondelete/{id}', [App\Http\Controllers\Admin\Design\DraftDesignController::class, 'destroysection']);
		});
		Route::prefix('designcategory')->group(function () {
			Route::get('/', [App\Http\Controllers\Admin\Design\DesignController::class, 'categoryindex']);
			Route::get('/add', [App\Http\Controllers\Admin\Design\DesignController::class, 'categorycreate']);
			Route::post('/store', [App\Http\Controllers\Admin\Design\DesignController::class, 'categorystore']);
			Route::post('/update', [App\Http\Controllers\Admin\Design\DesignController::class, 'categoryupdate']);
			Route::get('/edit/{id}', [App\Http\Controllers\Admin\Design\DesignController::class, 'categoryedit']);
			Route::get('/delete/{id}', [App\Http\Controllers\Admin\Design\DesignController::class, 'categorydestroy']);
		});
	// });
	***********************************
12. Promotions Module
	- copy app\Http\Controllers\Admin\Promotions
	- copy app\Models\Promotions
	- copy database\migrations\promotions
	- copy resources\views\admin\promotions
	- copy config\promotions.php
	- copy seo module 
	- copy below code in app\Providers\AppServiceProvider.php
		
		*************************
		use Illuminate\Support\Facades\App;
		public function boot()
    {
        if(isset($_GET['lang']))
        {
            $locale = $_GET['lang'];
        }
        else{
            $locale='en';
        }
        view()->share('locale', $locale);
		App::setLocale($locale);
		************************************
	- copy below code in routes	
	
	**********************************
	//promotions
    //Route::group(['middleware' => ['can:Promotions', 'setlocale']], function () {
        // Route::get('draftpromotions/{slug}', [App\Http\Controllers\Admin\Promotions\DraftPromotionsController::class,'view'])->middleware('setlocale');
        Route::prefix('promotions')->group(function () {
            Route::get('/', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'index']);
            Route::get('/add', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'create']);
            Route::post('/store', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'store']);
            Route::post('/update', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'update']);
            Route::get('/edit/{pointslug}', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'edit']);
            Route::get('/delete/{id}', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'destroy']);
            Route::get('/sectiondelete/{id}', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'destroysection']);
            Route::get('/loaddesign', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'loaddesign']);
        });
        Route::prefix('draftpromotions')->group(function () {
            Route::get('/', [App\Http\Controllers\Admin\Promotions\DraftPromotionsController::class, 'index']);
            Route::get('/add', [App\Http\Controllers\Admin\Promotions\DraftPromotionsController::class, 'create']);
            Route::post('/store', [App\Http\Controllers\Admin\Promotions\DraftPromotionsController::class, 'store']);
            Route::post('/update', [App\Http\Controllers\Admin\Promotions\DraftPromotionsController::class, 'update']);
            Route::get('/edit/{pointslug}', [App\Http\Controllers\Admin\Promotions\DraftPromotionsController::class, 'edit']);
            Route::get('/delete/{id}', [App\Http\Controllers\Admin\Promotions\DraftPromotionsController::class, 'destroy']);
            Route::get('/sectiondelete/{id}', [App\Http\Controllers\Admin\Promotions\DraftPromotionsController::class, 'destroysection']);
        });
        Route::prefix('promotionscategory')->group(function () {
            Route::get('/', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'categoryindex']);
            Route::get('/add', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'categorycreate']);
            Route::post('/store', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'categorystore']);
            Route::post('/update', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'categoryupdate']);
            Route::get('/edit/{id}', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'categoryedit']);
            Route::get('/delete/{id}', [App\Http\Controllers\Admin\Promotions\PromotionsController::class, 'categorydestroy']);
        });
    //});
	**************************
	- promotion frontend controller code
	
	***********************************
	use App\Models\Promotions\Promotions;
	
	public function promotions()
    {
        $locale = app()->getLocale();
        $slug = 'promotions';

        $promotions = Promotions::where('locale', $locale)->where('status', '1')->whereDate('publish_on', '<=', date('Y-m-d'))->orderBy('publish_on', 'DESC')->paginate(10);

        $data['promotions'] = $promotions;
        return view('promotions', $data);
    }
	*************************
	
	- promotion frontend view code
	
	**************************
	<section id="promoPage">
        <div class="container">
            <div class="row">
                @foreach($promotions as $k => $v)
                <div class="col-12 col-md-6 mb-5">
                    <a href="{{URL('promotions/'.$v['slug'])}}">
                        <div class="imgBox">
                            <?php $image = explode('|',$v['image']);?>
                            <img src="{{URL('gallery/'.$image[0])}}" alt="{{$image[1] ?? $v['title']}}" width="100%" height="auto">
                        </div>
                        <h2 class="promoHead">{{$v['title']}}</h2>
                    </a>
                </div>
                @endforeach
            </div>
            <div class="row d-none">
                <div class="col-12 d-flex justify-content-center mt-5">
                    {{$promotions->links('pagination.default')}}
                </div>
            </div>
        </div>
    </section>
	*******************
	
	- promtions frontend slug view controller code
	
	******************************
		public function show($slug): View
    {
        $locale = app()->getLocale();
        //promotion
        $promotions = Promotions::with('sections')->where('locale', $locale)->where('status', '1')->where('slug', $slug)->whereDate('publish_on', '<=', date('Y-m-d'))->orderBy('publish_on', 'DESC')->first();
        if (empty($promotions)) {
            abort(404);
        }
        $promotionssections = $promotions['sections']->groupBy('type');
        $data['promotions'] = $promotions;
        $data['promotionssections'] = $promotionssections;

        if (!empty($promotions) && config('promotions.section.' . $slug)) {
            foreach (config('promotions.section.' . $slug) as $k => $v) {
                $promotionssections[$k] = PromotionsSection::with('children')->where('promotions_id', $promotions->id)->where('type', $k)->orderBy('order', 'ASC')->get()->toArray();
            }
        }
        return view('frontend.show',$data);
    }
	**************************
	
	- promotions frontend slug view blade
	
	***************************
	<section class="page-section" id="about">
		<div class="container">
			<div class="text-center">
				<h2 class="section-heading text-uppercase">{{$promotions['title']}}</h2>
				<h3 class="section-subheading text-muted">{{date('F d, Y',strtotime($promotions['publish_on']))}}</h3>
			</div>
			@if(!empty($promotions['image']))
					<?php $image = explode('|',$promotions['image']);?>
					<div class="timeline-image"><img class="rounded-circle img-fluid" src="{{URL('gallery/'.$image[0])}}" alt="..." /></div>
					@endif
					@if(isset($promotionssections['content']))
					@foreach($promotionssections['content'] as $k => $v)
					<?php
					$scontent = json_decode($v['content'],true);
					?>
					{!! $scontent['content'] !!}
					@endforeach
					@endif
		</div>
	</section>
	**************************
	
13. Seo MOdule
	- copy database\migrations\seo
	- copy app\Models\Seo

14. Menu Module
	- copy app\Http\Controllers\Admin\Menu
	- copy app\Models\Menu\Menu.php
	- copy resources\views\admin\menu
	- copy database\migrations\menu
	- copy public\menu
	- copy below code in routes
	
	*******************
	//Route::group(['middleware' => ['can:Menu']], function () {
        Route::prefix('menu')->group(function () {
            Route::get('/', [App\Http\Controllers\Admin\Menu\MenuController::class, 'create']);
            Route::post('/store', [App\Http\Controllers\Admin\Menu\MenuController::class, 'store'])->name('menu.store');
        });
    //});
	********************
	
	- call menu in frontend
		include below code
		***********************
		$locale = app()->getLocale();
		$url =\URL::current();
		
		$menulang = ($locale=='en')?'':'_'.$locale;
		$headermenu = \App\Models\Menu\Menu::where('title', 'main'.$menulang)->first();
		$headermenuar = (!empty($headermenu))?json_decode($headermenu->content,true):[];
		
		@foreach($headermenuar as $mk => $mv)
			<?php
			$menuactive = '';
			if(isset($mv['children'])){
				$menuchildrenar = collect($mv['children'])->pluck('href')->toArray();
				if (in_array($url, $menuchildrenar))
					$menuactive = 'active';
			}
			else if($mv['href']==$url){
				$menuactive = 'active';
			}
			?>
			<li class="nav-item @if(isset($mv['children'])) dropdown megaMenu @endif {{$menuactive}}">
				<a class="nav-link @if(isset($mv['children'])) dropdown-toggle @endif" href="{{$mv['href']}}" id="navbarDropdown{{$mk}}" @if(isset($mv['children'])) role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" @endif target="{{$mv['target']}}">{{$mv['text']}}</a>
				@if(isset($mv['children']))
				<i class="icon-right-arrow mobDwnIcon d-lg-none"></i>
				<div class="dropdown-menu" aria-labelledby="navbarDropdown{{$mk}}">
					@foreach($mv['children'] as $ck => $cv)
					<?php
					$activeclass = '';
					if($url==$cv['href']){
						$activeclass = 'active';
						$breadcrumbdata = [$mv['text'] => $mv['href'], $cv['text'] => $cv['href']];
					}
					?>
					<a class="dropdown-item {{$activeclass}}" href="{{$cv['href']}}" target="{{$mv['target']}}">{{$cv['text']}}</a>
					@endforeach
				</div>
				@endif
			</li>
			@endforeach
		************************************

Interview Prepartion, Uncategorized

Codeigniter 3 Codes

1. copy paste codeigiter folder
2. create database and configure application\config\database.php
3. edit config file application\config\config.php
	- $config['base_url'] = 'http://localhost/learning/codeignitertwo/';
	- $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-@\=';
3. edit autoload file application\config\autoload.php
	- $autoload['libraries'] = array('database','session');
	- $autoload['helper'] = array('url');
4. copy user files and user table
	- application\controllers\User.php
	- application\controllers\MController.php
		- this file is common file for using common functions like send mail file upload
	- application\models\User_model.php
	- application\views\user
	- user table query
	*********************
	CREATE TABLE `users` (
	 `id` int(20) NOT NULL AUTO_INCREMENT,
	 `name` varchar(255) DEFAULT NULL,
	 `email` varchar(255) NOT NULL,
	 `password` varchar(100) DEFAULT NULL,
	 `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
	 `verify_token` varchar(255) DEFAULT NULL,
	 `active` tinyint(1) DEFAULT '0',
	 PRIMARY KEY (`id`),
	 UNIQUE KEY `email` (`email`)
	)
	***********************
5. copy phpmailer folder in root
6. add include files and home page for layout in view
	- add frontend folder in root for design required files
	- add link css and js
	*********************
	<link href="<?php echo base_url(); ?>/frontend/css/tiny-slider.css" rel="stylesheet">
	<script src="<?php echo base_url(); ?>/frontend/js/scripts.js"></script>
	********************
	- welcome controller home functions
	********************
	public function home()
	{
		if($this->session->userdata('useremail')){
			$this->load->view('includes/header');
			$this->load->view('welcome_message');
			$this->load->view('includes/footer');		
		}
		else{
			redirect('user/login');
		}
	}
	*********************
7. copy admin files and admin table
	- application\controllers\Admin.php
	- application\models\Admin_model.php
	- application\views\admin
	- admin table query
	*******************
	CREATE TABLE `admin` (
	 `id` int(20) NOT NULL AUTO_INCREMENT,
	 `name` varchar(255) DEFAULT NULL,
	 `email` varchar(255) NOT NULL,
	 `password` varchar(100) DEFAULT NULL,
	 `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
	 PRIMARY KEY (`id`),
	 UNIQUE KEY `email` (`email`)
	)
	*******************
8. copy news module files and news table
	- application\controllers\News.php
	- application\models\News_model.php
	- application\views\admin\news
	- news table query
	******************
	CREATE TABLE `news` (
	 `id` int(20) NOT NULL AUTO_INCREMENT,
	 `title` varchar(255) DEFAULT NULL,
	 `slug` varchar(255) DEFAULT NULL,
	 `content` varchar(255) NOT NULL,
	 `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
	 `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	 `image` varchar(255) DEFAULT NULL,
	 PRIMARY KEY (`id`),
	 UNIQUE KEY `slug` (`slug`)
	)
	********************
	- create photos folder in root for image upload
9. copy gallery module files and gallery table and gallery category table
	- application\controllers\Gallery.php
	- application\models\Gallery_model.php
	- application\views\admin\gallery
	- gallery category table query
	*************************
	CREATE TABLE `gallery_category` (
	 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
	 `category` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
	 `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
	 `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	 PRIMARY KEY (`id`)
	)
	*************************
	- gallery table query
	*************************
	CREATE TABLE `gallery` (
	 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
	 `path` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
	 `category` varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
	 `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
	 `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	 PRIMARY KEY (`id`)
	)
	**************************
	- create gallery folder in root
	- add input field in form
		- add this code in controller
		****************************
		$this->load->view('admin/gallery/gallerymodal');
        $this->load->view('admin/gallery/fieldscript');
        $this->load->view('admin/gallery/script');
		****************************
		- add this code in view input field
		****************************
		<?php $this->view('admin/gallery/mediainput', ['name' => 'featureimage', 'class' => 'required', 'attr' =>'data-empty=Select&nbsp;Image', 'sizemessage' => '600 x 400']); ?>
		
		//for edit
		<?php $this->view('admin/gallery/mediainput', ['name' => 'featureimage', 'class' => 'required', 'attr' =>'data-empty=Select&nbsp;Image', 'sizemessage' => '600 x 400','edit'=>true,'value'=>$news['featureimage']]); ?>
		****************************
10. routes
	- edit application\config\routes.php
	- samples
		**********************
		$route['admin/addnews'] = 'news/add'; //here news is controller and add is function
		$route['admin/news'] = 'news/list';
		**********************
	- routes with parameter
		*********************
		$route['admin/news/edit/(:any)'] = 'news/edit/$1';
		*********************
		edit function pass parameter
		*********************
		public function edit($id)
		*********************
		
		
		
Interview Prepartion, Uncategorized

WordPress create custom frontend form

Add this code for save custom field value

function __update_post_meta( $post_id, $field_name, $value = '' )
{
    if ( empty( $value ) OR ! $value )
    {
        delete_post_meta( $post_id, $field_name );
    }
    elseif ( ! get_post_meta( $post_id, $field_name ) )
    {
        add_post_meta( $post_id, $field_name, $value );
    }
    else
    {
        update_post_meta( $post_id, $field_name, $value );
    }
}

add this code for html form

function newletterform(){
    if(isset($_POST['newslettersubmit']))
    {

        $id = wp_insert_post(array(
            'post_title'=>$_POST['newslettername'], 
            'post_type'=>'my_form',
          ));
          __update_post_meta( $id, 'customfield', $_POST['newsletteremail'] );
echo "<script>window.location.replace('".$_SERVER['HTTP_REFERER']."');</script>";
    }
    ?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>#newsletterform" class="row g-3" id="newsletterform">
								<div class="col-auto">
									<input type="text" class="form-control" placeholder="Enter your name" name="newslettername">
								</div>
								<div class="col-auto">
									<input type="email" class="form-control" placeholder="Enter your email" name="newsletteremail">
								</div>
								<div class="col-auto">
                                <input required type="hidden" name="page_options" value="newslettername, newsletteremail" />
									<input type="submit" class="btn btn-primary" name="newslettersubmit">
										<span class="fa fa-paper-plane"></span>
									</input>
								</div>
							</form>
    <?php
}

Register Post Type

$labels = array(
    'name'               => ucfirst('newsletter'),
    'singular_name'      => 'newsletter',
    'menu_name'          => ucfirst('newsletter'),
    'name_admin_bar'     => ucfirst('newsletter'),
    'add_new'            => 'Add New',
    'add_new_item'       => 'Add New '.ucfirst('newsletter').'',
    'new_item'           => 'New '.ucfirst('newsletter').'',
    'edit_item'          => 'Edit '.ucfirst('newsletter').'',
    'view_item'          => 'View '.ucfirst('newsletter').'',
    'all_items'          => 'All '.ucfirst('newsletter').'',
    'search_items'       => 'Search '.ucfirst('newsletter').'s',
    'parent_item_colon'  => 'Parent '.ucfirst('newsletter').':',
    'not_found'          => 'No '.'newsletter'.' found.',
    'not_found_in_trash' => 'No '.'newsletter'.'s found in Trash.'
);
$args = array( 
    'labels'		=> $labels,
    'public'		=> true,
    'rewrite'		=> array( 'slug' => 'newsletter' ),
    'has_archive'   => true,
    'show_in_menu' => false,
    'menu_position' => 20,
    'menu_icon'     => 'dashicons-carrot',
    'taxonomies'		=> array( 'post_tag', 'category' ),
    'supports'      => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt','custom-fields' )
);
register_post_type( 'newsletter', $args );

Frontend File upload code

/**********file upload code */
          require_once(ABSPATH . 'wp-admin/includes/file.php');
            global $wp_filesystem;
            WP_Filesystem();

            $content_directory = $wp_filesystem->wp_content_dir() . 'uploads/';
            $wp_filesystem->mkdir( $content_directory . 'newsletterfile' );

            $target_dir_location = $content_directory . 'newsletterfile/';

            if(isset($_FILES['newsletterfile'])){
                $name_file = 'newsletterfile'.date("h.iA").mt_rand(100000,999999).'.'.pathinfo($_FILES['newsletterfile']['name'],PATHINFO_EXTENSION);
                $tmp_name = $_FILES['newsletterfile']['tmp_name'];
            
                if( move_uploaded_file( $tmp_name, $target_dir_location.$name_file ) ) {
                    __update_post_meta( $id, 'newsletterfile', $name_file );
                } else {
                    //echo "The file was not uploaded";
                }
            }
            /***end file upload code */

Mail code

/***mail code */
            $to = 'ramkankannan@gmail.com'; //sendto@example.com
            $subject = 'Newsletter';
            $body = '<h1>'.$_POST['newslettername'].'</h1>';
            $body .= '<h1>'.$_POST['newsletteremail'].'</h1>';
            $headers = array('Content-Type: text/html; charset=UTF-8');
            
            wp_mail( $to, $subject, $body, $headers );
            /***end mail code */