Module Prestashop HelperList Position - php

I created my module and in the creation of a ListForm I added the "Position" column as seen in the Prestashop Doc but I don't have the arrows appearing to drag and drop nor the possibility to drag and drop. Prestashop 1.7
if ($result = Db::getInstance()->executeS($sql)) {
//Les champs à afficher
$this->_defaultOrderBy = 'position';
$this->fields_list = array(
'id_slider' => array(
'title' => 'ID',
'width' => 'auto',
'type' => 'text'
),
'commentaire' => array(
'title' => $this->l('commentaire'),
'width' => 'auto',
'type' => 'text'
),
'link' => array(
'title' => $this->l('link'),
'width' => 'auto',
'type' => 'text'
),
'test' => array(
'title' => $this->l('active'),
'active' => 'test',
'width' => 'auto',
'type' => 'bool',
'ajax' => true,
'align' => 'center'
),
'position' => array(
'title' => $this->l('Ordem'),
'filter_key' => 'a!position',
'position' => 'position',
'align' => 'center',
'class' => 'fixed-width-md'
),
'image' => array(
'title' => $this->l('image/video'),
'width' => 'auto',
'type' => 'text'
),
'videocover' => array(
'title' => $this->l('image/video'),
'width' => 'auto',
'type' => 'text'
),
'imagemobile' => array(
'title' => $this->l('image/video'),
'width' => 'auto',
'type' => 'text'
),
'imagepng' => array(
'title' => $this->l('image/png'),
'width' => 'auto',
'type' => 'text'
),
'imagepngmobile' => array(
'title' => $this->l('image/png'),
'width' => 'auto',
'type' => 'text'
)
);
$helper = new HelperList();
$helper->shopLinkType = '';
$helper->simple_header = false;
$helper->identifier = 'id_slider';
$helper->actions = array('edit', 'delete');
$helper->show_toolbar = true;
$helper->title = $this->displayName;
$helper->table = $this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name;
$helper->toolbar_btn['new'] = array(
'href' => AdminController::$currentIndex.'&configure='.$this->name.'&new='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'),
'desc' => $this->l('Nouveau slider')
);
return $helper->generateList($result, $this->fields_list);
}
return false;
}
I put you the image of an example found with what I expect and what I have.
I wish to have els felches on the side

You need to add this :
$helper->position_identifier = 'position';
$helper->orderBy = 'position';
$helper->orderWay = 'asc';

Related

update_post_meta() save custom multicheck box on database but it doesn't show on front end

I have two csv databases, I already migrate de patients database to wordpress but now I need to migrate a services database, each patient can have 1 or more services. First I compare both csv databases and add the data if the Name and Last Name are the same. Everything works good, the data is in the wordpress database because I can print it, but the multicheck box doesn't show the saved data:
And another problem is that I can't click update because on the front end there is no checkbox checked so the custom post type updates the database with nothing checked.
Here is the code that I am using to get the csv data and saves it on the wordpress database:
`function wd_add_data_metabox_with_namemb()
{
wp_suspend_cache_addition(true);
$file_path = get_stylesheet_directory() . '/PATINENTS_LAVISH.csv';
// echo var_dump($file_path);
if (isset($file_path)) {
$filename = $file_path;
$count_patients = 0;
$file = fopen($filename, "r");
while (($getData = fgetcsv($file, null, ',')) !== FALSE) { //GET THE VARIABLES SET
$count_patients++;
echo $count_patients . " :";
echo var_dump($getData);
echo '<br/>';
$name = $getData[2];
$last_name = $getData[3];
if ($name != '') {
$file_path_2 = get_stylesheet_directory() . '/CHARTS_PATIENTS.csv';
$filename_2 = $file_path_2;
$count_charts = 0;
$file_2 = fopen($filename_2, "r");
while (($getData_2 = fgetcsv($file_2, null, ',')) !== FALSE) { //GET THE VARIABLES SET
echo "Chart " . $count_charts . " : ";
echo var_dump($getData_2);
echo '<br/>';
$name_chart = $getData_2[0];
$last_name_chart = $getData_2[1];
echo $name . ' and ' . $name_chart;
echo $last_name . ' and ' . $last_name_chart;
echo '<br/>';
if ($name == $name_chart && $last_name == $last_name_chart) {
$q = new WP_Query(array(
'post_type' => 'patient',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'patient_name',
'value' => $name,
),
array(
'key' => 'patient_last_name',
'value' => $last_name,
),
)
));
while ($q->have_posts()) {
$q->the_post();
$patient_id_chart = get_the_ID();
echo 'Patient ID ' . $patient_id_chart;
$service_chart = get_post_meta($patient_id_chart, 'patient_area_treated_group', true);
$service_chart_2 = get_post_meta($patient_id_chart, 'patient_pre_charting_answers', true);
echo var_dump($service_chart_2);
// check for existing charts
if (!empty($service_chart)) {
$key = count($service_chart);
} else {
$key = 0;
}
if (get_post_type() == 'patient') {
$ticket_id = $patient_id_chart . '-' . $key;
$area_treated = array(
explode(' $', $getData_2[2], 2),
);
$time = strtotime($getData_2[8]);
$comments = $getData_2[6];
$discount_type = 'fixed';
$discount_amount = $getData_2[7];
$chart_energy = $getData_2[4];
$chart_size = $getData_2[3];
$chart_dcd = $getData_2[5];
if (get_page_by_title($area_treated[0], OBJECT, 'service')) {
// Exists
} else {
// Gather post data.
$my_post = array(
'post_title' => $area_treated[0][0],
'post_status' => 'publish',
'post_type' => 'service',
'meta_input' => array(
'service_male_price' => $area_treated[0][1],
'service_female_price' => $area_treated[0][1]
)
);
// Insert the post into the database.
wp_insert_post($my_post);
}
$service_chart[$key] = array(
'patient_service_ticket_id' => $ticket_id,
'patient_area_treated' => $area_treated,
'patient_service_units' => NULL,
'patient_service_time_treated' => $time,
'patient_service_comments' => $comments,
'patient_service_discount_type' => $discount_type,
'patient_service_discount_amount' => $discount_amount,
'patient_service_picture' => NULL,
);
$pre_service_chart[$key] = array(
'patient_service_pre_chart_id' => $ticket_id,
'patient_pregnant' => '',
'patient_pre_chart_comments' => NULL,
'patient_chart_energy' => $chart_energy,
'patient_chart_size' => $chart_size,
'patient_chart_dcd' => $chart_dcd,
);
if (!empty($area_treated) || $comments != '' || $discount_type != '' || $discount_amount != '') {
update_post_meta($patient_id_chart, 'patient_area_treated_group', $service_chart);
}
if (!empty($area_treated)) {
update_post_meta($patient_id_chart, 'patient_pre_charting_answers', $pre_service_chart);
// reset the form
update_post_meta($patient_id_chart, 'patient_area_treated', '');
update_post_meta($patient_id_chart, 'patient_service_time_treated_single', '');
update_post_meta($patient_id_chart, 'patient_service_comments_single', '');
update_post_meta($patient_id_chart, 'patient_service_discount_type_single', '');
update_post_meta($patient_id_chart, 'patient_service_discount_amount_single', '');
update_post_meta($patient_id_chart, 'patient_service_pre_chart_id', '');
update_post_meta($patient_id_chart, 'patient_pregnant', '');
update_post_meta($patient_id_chart, 'patient_pre_chart_comments', '');
update_post_meta($patient_id_chart, 'patient_chart_energy', '');
update_post_meta($patient_id_chart, 'patient_chart_size', '');
update_post_meta($patient_id_chart, 'patient_chart_dcd', '');
}
}
}
$count_charts++;
}
wp_reset_postdata();
}
}
}
fclose($file);
}
}
add_action('wp_head', 'wd_add_data_metabox_with_namemb');`
I just need the multicheckbox to read the database and show the checked options.
This is the code that creates all the custom fields for the patients custom post type with cmb2 plugin:
function patient_meta()
{
$role = user_has_role(get_current_user_id(), 'staff_nurse');
/**
* Metaboxes for Patient Info
*/
if ($role == false) {
$cmb_user = new_cmb2_box(array(
'id' => 'patient_meta',
'title' => __('Patient Data', 'cmb2'),
'object_types' => array('patient'), // Tells CMB2 to use user_meta vs post_meta
'show_names' => true,
'vertical_tabs' => false,
'tabs' => array(
array(
'id' => 'tab-1',
'title' => __('Info', 'cmb2'),
'fields' => array(
'patient_name',
'patient_last_name',
'patient_cell_phone',
'patient_home_phone',
'patient_date_of_birth',
'patient_gender',
'patient_email',
'patient_comments'
),
),
array(
'id' => 'tab-2',
'title' => __('Services', 'cmb2'),
'fields' => array(
'patient_area_treated_single',
'patient_service_comments_single',
'patient_service_discount_type_single',
'patient_service_discount_amount_single',
'patient_service_submit_single',
),
),
array(
'id' => 'tab-3',
'title' => __('Charts', 'cmb2'),
'fields' => array(
'patient_pre_charting_answers',
'patient_pre_chart_comments',
'patient_chart_area_treated',
'patient_time_treated',
'patient_chart_energy',
'patient_chart_size',
'patient_chart_dcd',
'patient_chart_comments',
'patient_chart_discount_type',
'patient_chart_discount_amount',
),
),
array(
'id' => 'tab-4',
'title' => __('Notes', 'cmb2'),
'fields' => array(
'patient_chart_comments',
'patient_note_comments_group',
'patient_notes_comments',
),
),
array(
'id' => 'tab-5',
'title' => __('Images', 'cmb2'),
'fields' => array(
'patient_images',
),
),
array(
'id' => 'tab-6',
'title' => __('Documents', 'cmb2'),
'fields' => array(
'patient_documents',
),
),
array(
'id' => 'tab-7',
'title' => __('Clearances', 'cmb2'),
'fields' => array(
'patient_clearances',
),
),
array(
'id' => 'tab-8',
'title' => __('Referrals', 'cmb2'),
'fields' => array(
'patient_referrals',
'referred_patient_name',
'referred_date',
'referred_date_used',
'referred_discount_used',
'patient_available_ticket_ids',
),
),
array(
'id' => 'tab-9',
'title' => __('History', 'cmb2'),
'fields' => array(
'patient_area_treated_group',
'patient_service_ticket_id',
'patient_area_treated',
'patient_service_comments',
'patient_service_picture',
),
),
),
));
} else {
$cmb_user = new_cmb2_box(array(
'id' => 'patient_meta',
'title' => __('Patient Data', 'cmb2'),
'object_types' => array('patient'), // Tells CMB2 to use user_meta vs post_meta
'show_names' => true,
'vertical_tabs' => false,
'tabs' => array(
array(
'id' => 'tab-1',
'title' => __('Info', 'cmb2'),
'fields' => array(
'patient_name',
'patient_last_name',
'patient_cell_phone',
'patient_home_phone',
'patient_date_of_birth',
'patient_gender',
'patient_email',
'patient_comments'
),
),
array(
'id' => 'tab-2',
'title' => __('Services', 'cmb2'),
'fields' => array(
'patient_area_treated_single',
'patient_service_comments_single',
'patient_service_discount_type_single',
'patient_service_discount_amount_single',
'patient_service_submit_single',
),
),
array(
'id' => 'tab-3',
'title' => __('Charts', 'cmb2'),
'fields' => array(
'patient_pre_charting_answers',
'patient_pre_chart_comments',
'patient_chart_area_treated',
'patient_time_treated',
'patient_chart_energy',
'patient_chart_size',
'patient_chart_dcd',
'patient_chart_comments',
'patient_chart_discount_type',
'patient_chart_discount_amount',
),
),
array(
'id' => 'tab-4',
'title' => __('Notes', 'cmb2'),
'fields' => array(
'patient_chart_comments',
'patient_note_comments_group',
'patient_notes_comments',
),
),
array(
'id' => 'tab-5',
'title' => __('Images', 'cmb2'),
'fields' => array(
'patient_images',
),
),
array(
'id' => 'tab-6',
'title' => __('Documents', 'cmb2'),
'fields' => array(
'patient_documents',
),
),
array(
'id' => 'tab-7',
'title' => __('Clearances', 'cmb2'),
'fields' => array(
'patient_clearances',
),
),
array(
'id' => 'tab-8',
'title' => __('Referrals', 'cmb2'),
'fields' => array(
'patient_referrals',
'referred_patient_name',
'referred_date',
'referred_date_used',
'referred_discount_used',
'patient_available_ticket_ids',
),
),
),
));
}
$cmb_user->add_field(array(
'name' => __('Patient Name', 'cmb2'),
'id' => 'patient_name',
'type' => 'text',
'column' => true,
'description' => '',
));
$cmb_user->add_field(array(
'name' => __('Last Name', 'cmb2'),
'id' => 'patient_last_name',
'type' => 'text',
'column' => true,
));
$cmb_user->add_field(array(
'name' => __('Cell Phone', 'cmb2'),
'id' => 'patient_cell_phone',
'type' => 'text',
'column' => true,
));
$cmb_user->add_field(array(
'name' => __('Home Phone', 'cmb2'),
'id' => 'patient_home_phone',
'type' => 'text',
'column' => true,
));
$cmb_user->add_field(array(
'name' => __('Date of Birth', 'cmb2'),
'description' => '',
'id' => 'patient_date_of_birth',
'type' => 'text_date'
));
$cmb_user->add_field(array(
'name' => 'Gender',
'id' => 'patient_gender',
'type' => 'radio_inline',
'options' => array(
'Male' => __('Male', 'cmb2'),
'Female' => __('Female', 'cmb2')
),
));
$cmb_user->add_field(array(
'name' => __('Email Address', 'cmb2'),
'id' => 'patient_email',
'type' => 'text'
));
$cmb_user->add_field(array(
'name' => __('Patient Comments', 'cmb2'),
'id' => 'patient_comments',
'type' => 'textarea'
));
/**
* Metaboxes for Patient Services
*/
/*****
* Single form to add to history tab
*****/
// $cmb_user->add_field(array(
// 'id' => 'patient_service_ticket_id_single',
// 'type' => 'text',
// 'description' => 'Ticket ID / Chart ID - not for editing',
// 'name' => 'Ticket ID',
// ) );
$cmb_user->add_field(array(
'id' => 'patient_area_treated_single',
'name' => __('Area Treated', 'cmb2'),
'type' => 'radio',
'options' => get_all_services(),
'default' => 'No Treatment $0.00'
));
$cmb_user->add_field(array(
'id' => 'patient_service_time_treated_single',
'name' => __('Time Treated', 'cmb2'),
'type' => 'text_datetime_timestamp',
// 'default' => get_post_datetime()
));
// $cmb_user->add_field(array(
// 'id' => 'patient_service_comments_single',
// 'name' => __('Comments', 'cmb2'),
// 'type' => 'textarea'
// ));
$cmb_user->add_field(array(
'name' => 'Discount Type',
'id' => 'patient_service_discount_type_single',
'type' => 'radio_inline',
'options' => array(
'none' => 'None',
'percentage' => 'Percentage',
'fixed' => 'Fixed Amount'
)
));
$cmb_user->add_field(array(
'name' => __('Discount Amount', 'cmb2'),
'id' => 'patient_service_discount_amount_single',
'type' => 'text'
));
$cmb_user->add_field(array(
'name' => __('Submit Service', 'cmb2'),
'id' => 'patient_service_submit_single',
'type' => 'text'
));
$cmb_user->add_field(array(
'name' => 'Add Service',
'id' => 'patient_service_submit_single',
'type' => 'button',
'after' => '<button value="submit-single" type="submit" class="btn btn-primary">Submit</button>'
));
$group_field_id = $cmb_user->add_field(array(
'id' => 'patient_area_treated_group',
'type' => 'group',
'options' => array(
'group_title' => __('Service {#}', 'cmb2'), // since version 1.1.4, {#} gets replaced by row number
'add_button' => __('Add Another Service', 'cmb2'),
'remove_button' => __('Remove Service', 'cmb2'),
'sortable' => true
),
));
$cmb_user->add_group_field($group_field_id, array(
'id' => 'patient_service_ticket_id',
'type' => 'text',
'description' => 'Ticket ID / Chart ID - not for editing',
'name' => 'Ticket ID'
));
$cmb_user->add_group_field($group_field_id, array(
'id' => 'patient_area_treated',
'name' => __('Area Treated', 'cmb2'),
'type' => 'multicheck',
'options' => get_all_services(),
'default' => 'No Treatment $0.00'
));
$cmb_user->add_group_field($group_field_id, array(
'id' => 'patient_service_time_treated',
'name' => __('Time Treated', 'cmb2'),
'type' => 'text_datetime_timestamp'
));
$cmb_user->add_group_field($group_field_id, array(
'id' => 'patient_service_comments',
'name' => __('Comments', 'cmb2'),
'type' => 'textarea'
));
$cmb_user->add_group_field($group_field_id, array(
'name' => 'Discount Type',
'id' => 'patient_service_discount_type',
'type' => 'radio_inline',
'options' => array(
'none' => 'None',
'percentage' => 'Percentage',
'fixed' => 'Fixed Amount'
)
));
$cmb_user->add_group_field($group_field_id, array(
'name' => 'Discount Amount',
'id' => 'patient_service_discount_amount',
'type' => 'text',
));
// $cmb_user->add_group_field( $group_field_id, array(
// 'id' => 'patient_service_picture',
// 'name' => __('Facial Picture', 'cmb2'),
// 'type' => 'file'
// ));
/**
* Metaboxes for Patient Charting
*/
$group_field_id = $cmb_user->add_field(array(
'id' => 'patient_pre_charting_answers',
'type' => 'group',
'options' => array(
'group_title' => __('Chart {#}', 'cmb2'), // since version 1.1.4, {#} gets replaced by row number
'add_button' => __('Add Another Chart', 'cmb2'),
'remove_button' => __('Remove Chart', 'cmb2'),
'sortable' => true,
),
));
// match pre-chart to service
$cmb_user->add_group_field($group_field_id, array(
'name' => 'This Laser Pre-Chart is for test',
'id' => 'patient_service_pre_chart_id',
'type' => 'select_plus',
'description' => 'Select Service Ticket ID',
'options' => get_ticket_ids()
));
// Id's for group's fields only need to be unique for the group. Prefix is not needed.
$cmb_user->add_group_field($group_field_id, array(
'name' => 'Are you pregnant or breastfeeding?',
'id' => 'patient_pregnant',
'type' => 'radio_inline',
'options' => array(
'Yes' => __('Yes', 'cmb2'),
'No' => __('No', 'cmb2')
),
));
$cmb_user->add_group_field($group_field_id, array(
'name' => 'Pre Chart Comments',
'id' => 'patient_pre_chart_comments',
'type' => 'textarea_small',
));
$cmb_user->add_group_field($group_field_id, array(
'name' => 'Energy',
'id' => 'patient_chart_energy',
'type' => 'text',
));
$cmb_user->add_group_field($group_field_id, array(
'name' => 'Spot Size',
'id' => 'patient_chart_size',
'type' => 'text',
));
$cmb_user->add_group_field($group_field_id, array(
'name' => 'DCD',
'id' => 'patient_chart_dcd',
'type' => 'text',
));
/**
* Metaboxes for Patient Notes
*/
$cmb_user->add_field(array(
'name' => 'Comments',
'id' => 'patient_chart_comments',
'type' => 'textarea_small',
'after' => '<button value="submit-single" type="submit" class="btn btn-primary">Submit</button>',
));
$group_field_id = $cmb_user->add_field(array(
'id' => 'patient_note_comments_group',
'type' => 'group',
'options' => array(
'group_title' => __('Comment {#}', 'cmb2'), // since version 1.1.4, {#} gets replaced by row number
'add_button' => __('Add Another Comment', 'cmb2'),
'remove_button' => __('Remove Comment', 'cmb2'),
'sortable' => true,
),
));
$cmb_user->add_group_field($group_field_id, array(
'name' => 'Comments',
'id' => 'patient_notes_comments',
'type' => 'textarea_small',
));
/**
* Metaboxes for Patient Images
*/
$cmb_user->add_field(array(
'name' => 'Images',
'id' => 'patient_images',
'type' => 'file_list',
'text' => array(
'file_text' => 'test'
)
));
/**
* Metaboxes for Patient Documents
*/
$cmb_user->add_field(array(
'name' => 'Documents',
'id' => 'patient_documents',
'type' => 'file_list',
));
/**
* Metaboxes for Patient Clearances
*/
$cmb_user->add_field(array(
'name' => 'Clearances',
'id' => 'patient_clearances',
'type' => 'file_list',
));
/**
* Metaboxes for Patient Referrals
*/
$group_field_id = $cmb_user->add_field(array(
'id' => 'patient_referrals',
'type' => 'group',
'options' => array(
'group_title' => __('Referral {#}', 'cmb2'), // since version 1.1.4, {#} gets replaced by row number
'add_button' => __('Add Another Referral', 'cmb2'),
'remove_button' => __('Remove Referral', 'cmb2'),
'sortable' => true,
),
));
$cmb_user->add_group_field($group_field_id, array(
'name' => 'Referred Patient Name',
'id' => 'referred_patient_name',
'type' => 'select',
'options' => get_patient_names()
));
$cmb_user->add_group_field($group_field_id, array(
'name' => 'Referred Date',
'id' => 'referred_date',
'type' => 'text_date',
));
$cmb_user->add_group_field($group_field_id, array(
'name' => 'Date Used',
'id' => 'referred_date_used',
'type' => 'text_date',
));
$cmb_user->add_group_field($group_field_id, array(
'name' => 'Discount Used',
'id' => 'referred_discount_used',
'type' => 'radio_inline',
'options' => array(
'Yes' => __('Yes', 'cmb2'),
'No' => __('No', 'cmb2')
),
));
$cmb_user->add_group_field($group_field_id, array(
'id' => 'patient_available_ticket_ids',
'name' => __('Ticket ID', 'cmb2'),
'description' => 'Assign the ticket ID to apply this discount',
'type' => 'select',
'options' => get_ticket_ids()
));
}
add_action('cmb2_init', 'patient_meta');

How to change RowHeaders in products using prestashop 1.6

I am working over prestashop admin and i am not able to change the row headers iin products . kindly provide me appropriate solution for the same. Language and Database using is PHP-Mysql
everything you need to change the product page headers you find :
controllers/admin/AdminProductsController.php
in the __construct() function you will find.
for the content:
$this->_select .= 'shop.`name` AS `shopname`, a.`id_shop_default`, ';
$this->_select .= $alias_image.'.`id_image` AS `id_image`, cl.`name` AS `name_category`, '.$alias.'.`price`, 0 AS `price_final`, a.`is_virtual`, pd.`nb_downloadable`, sav.`quantity` AS `sav_quantity`, '.$alias.'.`active`, IF(sav.`quantity`<=0, 1, 0) AS `badge_danger`';
for the header:
$this->fields_list = array();
$this->fields_list['id_product'] = array(
'title' => $this->l('ID'),
'align' => 'center',
'class' => 'fixed-width-xs',
'type' => 'int'
);
$this->fields_list['image'] = array(
'title' => $this->l('Image'),
'align' => 'center',
'image' => 'p',
'orderby' => false,
'filter' => false,
'search' => false
);
$this->fields_list['name'] = array(
'title' => $this->l('Name'),
'filter_key' => 'b!name'
);
$this->fields_list['reference'] = array(
'title' => $this->l('Reference'),
'align' => 'left',
);
if (Shop::isFeatureActive() && Shop::getContext() != Shop::CONTEXT_SHOP) {
$this->fields_list['shopname'] = array(
'title' => $this->l('Default shop'),
'filter_key' => 'shop!name',
);
} else {
$this->fields_list['name_category'] = array(
'title' => $this->l('Category'),
'filter_key' => 'cl!name',
);
}
$this->fields_list['price'] = array(
'title' => $this->l('Base price'),
'type' => 'price',
'align' => 'text-right',
'filter_key' => 'a!price'
);
$this->fields_list['price_final'] = array(
'title' => $this->l('Final price'),
'type' => 'price',
'align' => 'text-right',
'havingFilter' => true,
'orderby' => false,
'search' => false
);
if (Configuration::get('PS_STOCK_MANAGEMENT')) {
$this->fields_list['sav_quantity'] = array(
'title' => $this->l('Quantity'),
'type' => 'int',
'align' => 'text-right',
'filter_key' => 'sav!quantity',
'orderby' => true,
'badge_danger' => true,
//'hint' => $this->l('This is the quantity available in the current shop/group.'),
);
}
$this->fields_list['active'] = array(
'title' => $this->l('Status'),
'active' => 'status',
'filter_key' => $alias.'!active',
'align' => 'text-center',
'type' => 'bool',
'class' => 'fixed-width-sm',
'orderby' => false
);
of course it is best practice reproduce the override files in:
controllers/admin/AdminProductsController.php

Recreate structure of html page from array

Good morning everyone,
I'm trying to recreate a html page extracting data from an array.
This is the array
$MiniSiteStructureArray = array(
'section_1' => array(
'class' => 'main full',
'contents' => array(
'img' => array(
'class' => 'logo',
'src' => 'assets/images/logo-480x176.png'
),
'div' => array(
'class' => 'cover sfondo',
'img' => array(
'class' => 'cover-image',
'src' => 'assets/images/cover-img-header.png'
)
),
'div_1' => array(
'class' => 'cover-mob sfondo-mob',
'img' => array(
'class' => 'cover-image-mob',
'src' => 'assets/images/cover-img-mobile.jpg'
)
),
'a' => array(
'class' => 'button order light',
'div' => array(
'class' => 'data-min',
'div' => array(
'class' => 'label-holder',
'img' => array(
'src' => 'assets/images/sfondo-cta.jpg'
),
'p' => array(
'class' => 'label',
'strong' => 'text'
)
),
'div_1' => array(
'class' => 'price-holder'
)
)
),
'div_2' => array(
'class' => 'cta',
'p' => array(
'class' => 'main-title',
'a' => array(
'strong' => 'text'
)
)
),
'img_1' => array(
'class' => 'main-title',
'src' => 'assets/images/extra_1.png'
)
)
),
'section_2' => array(
'class' => 'gallery',
'id' => 'video',
'contents' => array(
'p' => array(
'class' => 'title video-title',
'span' => array(
'strong' => 'text'
)
),
'div' => array(
'class' => 'container',
'div' => array(
'class' => 'arrow-container prev',
'img' => array(
'class' => 'arrow',
'src' => 'assets/images/freccia-sx_1.png'
)
),
'div_1' => array(
'class' => 'arrow-container next',
'img' => array(
'class' => 'arrow',
'src' => 'assets/images/freccia-dx_1.png'
)
),
'div_2' => array(
'class' => 'gallery-holder',
'div' => array(
'class' => 'internal single',
'div' => array(
'class' => 'gallery-item video',
'div' => array(
'class' => 'wrapper video-wrapper',
'img' => array(
'class' => 'play-vid pointer thumb',
'src' => 'assets/images/img-spot-tv.png'
),
'img_1' => array(
'class' => 'play-icon hover',
'src' => 'assets/images/play.png'
)
)
)
)
)
)
)
),
'section_3' => array(
'class' => 'gallery',
'id' => 'image',
'contents' => array(
'p' => array(
'class' => 'title image-title',
'span' => array(
'strong' => array(
'strong' => 'text'
)
)
),
'div' => array(
'class' => 'container',
'div' => array(
'class' => 'arrow-container prev',
'img' => array(
'class' => 'arrow',
'src' => 'assets/images/freccia-sx_1.png'
)
),
'div_1' => array(
'class' => 'arrow-container next',
'img' => array(
'class' => 'arrow',
'src' => 'assets/images/freccia-dx_1.png'
)
),
'div_2' => array(
'class' => 'gallery-holder',
'div' => array(
'class' => 'internal single',
'div' => array(
'class' => 'gallery-item',
'div' => array(
'class' => 'wrapper image-wrapper',
'img' => array(
'class' => 'thumb',
'src' => 'assets/images/img-1.png'
),
'p' => array(
'class' => 'caption image-caption',
'span' => 'text'
)
)
)
),
'div_1' => array(
'class' => 'internal single',
'div' => array(
'class' => 'gallery-item',
'div' => array(
'class' => 'wrapper image-wrapper',
'img' => array(
'class' => 'thumb',
'src' => 'assets/images/img-2.png'
),
'p' => array(
'class' => 'caption image-caption',
'span' => 'text'
)
)
)
),
'div_2' => array(
'class' => 'internal single',
'div' => array(
'class' => 'gallery-item',
'div' => array(
'class' => 'wrapper image-wrapper',
'img' => array(
'class' => 'thumb',
'src' => 'assets/images/img-3.png'
),
'p' => array(
'class' => 'caption image-caption',
'span' => 'text'
)
)
)
),
'div_i' => array(
'class' => 'internal single',
'div' => array(
'class' => 'gallery-item',
'div' => array(
'class' => 'wrapper image-wrapper',
'img' => array(
'class' => 'thumb',
'src' => 'assets/images/img-i.png'
),
'p' => array(
'class' => 'caption image-caption',
'span' => 'text'
)
)
)
),
)
),
'div_1' => array(
'class' => 'counter'
)
)
),
'section_4' => array(
'class' => 'main',
'id' => 'info',
'contents' => array(
'div' => array(
'class' => 'cover sfondo',
'img' => array(
'class' => 'cover-image',
'src' => 'assets/images/collection-img.jpg'
)
),
'div' => array(
'class' => 'cover-mob sfondo-mob',
'img' => array(
'class' => 'cover-image-mob',
'src' => 'assets/images/collection-img-mobile.jpg'
)
),
'a' => array(
'class' => 'button order light',
'div' => array(
'class' => 'data-min',
'div' => array(
'class' => 'label-holder',
'img' => array(
'src' => 'assets/images/sfondo-cta.jpg'
),
'p' => array(
'class' => 'label',
'strong' => 'text'
)
),
'div_1' => array(
'class' => 'price-holder',
)
)
),
'p' => array(
'class' => 'text-numero-1',
'span' => array(
'strong' => '',
'strong_1' => 'text',
'strong_2' => 'text',
'strong_3' => array(
'class' => 'text-anziche',
'strike' => 'text'
)
)
)
)
),
'section_5' => array(
'class' => 'banner resize',
'id' => 'num1',
'contents' => array(
'div' => array(
'class' => 'cover'
),
'div_1' => array(
'class' => 'container',
'img' => array(
'class' => 'banner-image',
'src' => 'assets/images/number-1.png'
),
'p' => array(
'class' => 'cta num1-cta',
'span' => array(
'a' => 'text'
)
)
)
)
),
'section_6' => array(
'class' => 'gallery',
'id' => 'gifts',
'contents' => array(
'p' => array(
'class' => 'title gifts-title',
'span' => array(
'strong' => array(
'strong' => 'text'
)
)
),
'div' => array(
'class' => 'container',
'div' => array(
'class' => 'arrow-container prev',
'img' => array(
'class' => 'arrow',
'src' => 'assets/images/freccia-sx_1.png'
)
),
'div_1' => array(
'class' => 'arrow-container next',
'img' => array(
'class' => 'arrow',
'src' => 'assets/images/freccia-dx_1.png'
)
),
'div_2' => array(
'class' => 'gallery-holder',
'div' => array(
'class' => 'internal double',
'div' => array(
'class' => 'gallery-item',
'div' => array(
'class' => 'wrapper gifts-wrapper',
'img' => array(
'class' => 'thumb',
'src' => 'assets/images/gift-1.jpg'
),
'p' => array(
'class' => 'caption gifts-caption',
'span' => 'text'
)
)
),
'div_1' => array(
'class' => 'gallery-item',
'div' => array(
'class' => 'wrapper gifts-wrapper',
'img' => array(
'class' => 'thumb',
'src' => 'assets/images/gift-2.jpg'
),
'p' => array(
'class' => 'caption gifts-caption',
'span' => 'text'
)
)
)
)
)
),
'div_1' => array(
'class' => 'counter'
),
'p' => array(
'class' => 'disclaimer gifts-disclaimer',
'span' => array(
'span' => 'text'
)
)
)
),
'section_7' => array(
'class' => 'footer',
'contents' => array(
'div' => array(
'class' => 'container',
'div' => array(
'class' => 'box',
'div' => array(
'class' => 'wrapper',
'p' => array(
'class' => 'icon pointer',
'img' => array(
'src' => 'assets/images/icn-piano-opera.png'
)
),
'a' => array(
'class' => 'link',
'p' => array(
'class' => 'title',
'span' => 'text'
)
)
)
),
'div_1' => array(
'class' => 'box',
'div' => array(
'class' => 'wrapper',
'p' => array(
'class' => 'icon pointer',
'img' => array(
'src' => 'assets/images/icn-piano-opera.png'
)
),
'a' => array(
'class' => 'link gtm-externallinks',
'p' => array(
'class' => 'title',
'span' => 'text'
)
)
)
)
)
)
),
'section_8' => array(
'class' => 'partners resize',
'contents' => array(
'div' => array(
'class' => 'container',
'img' => array(
'class' => 'partner',
'src' => 'assets/images/logo-dinsey-lucasfilm_2_1.png'
),
'img_1' => array(
'class' => 'partner',
'src' => 'assets/images/logo-mondadori_1_1.png'
)
)
)
),
'section9' => array(
'class' => 'partners-light',
'contents' => array(
'div' => array(
'class' => 'container',
'img' => array(
'class' => 'partner',
'src' => 'assets/images/copyrightLucasLight.png'
)
)
)
));
foreach ($MiniSiteStructureArray as $section => $sectionStructure) {
foreach ($sectionStructure['contents'] as $tag => $contents) {
$tags[] = $tag;
}
$a = formatTag($tags);
$sections[] = $section;
}
$b = formatTag($sections);
as you can see html tags aren't well formed (es. div and div_1), so I have created this function
function formatTag($tags) {
$correctTags = array();
foreach ($tags as $tag) {
switch ($tag) {
case strpos($tag, "img"):
$tag = "img";
break;
case strpos($tag, "div"):
$tag = "div";
break;
case strpos($tag, "a"):
$tag = "a";
break;
case strpos($tag, "p"):
$tag = "p";
break;
case strpos($tag, "section"):
$tag = "section";
break;
}
array_push($correctTags, $tag);
}
return $correctTags;
}
So my idea is to recreate the array with new keys (well formed tag).
But now i'm stuck.
Supposing that the newKeysArray is done and supposing to create section_1.
How can I do?
Thanks
Edit : New array
$structureArray = array(
'tag' => 'section_8',
'class' => 'partners resize',
'contents' => array(
'tag' => 'div',
'class' => 'container',
'contents' => array(
'tag' => 'img',
'class' => 'partner',
'src' => 'assets/images/logo-dinsey-lucasfilm_2_1.png'
)
)
);
Better?
Edit_2 : NewNewArray
$structureArray = array(
'tag' => array(
'tagName' => 'section_1',
'class' => 'main full',
'contents' => array(
'tag' => array(
'tagName' => 'img',
'class' => 'logo',
'src' => 'assets/images/logo-480x176.png'
),
),
),
'tag_1' => array(
'tagName' => 'div',
'class' => 'cover sfondo',
'contents' => array(
'tag' => array(
'tagName' => 'img',
'class' => 'cover-image',
'src' => 'assets/images/cover-img-header.png'
)
),
),
);
This should be better, don't you think?
In this case I manually incremented key tag because in html page it not appears
Edit_3_I_hope: NewNewNewArray
$structureArray = array(
'tag' => array(
'tagName' => 'section_1',
'tagAttributes' => array(
'class' => 'main full',
),
'contents' => array(
'tag' => array(
'tagName' => 'img',
'tagAttributes' => array(
'class' => 'logo',
'src' => 'assets/images/logo-480x176.png'
)
),
),
),
'tag_1' => array(
'tagName' => 'div',
'tagAttributes' => array(
'class' => 'cover sfondo',
),
'contents' => array(
'tag' => array(
'tagName' => 'img',
'tagAttributes' => array(
'class' => 'cover-image',
'src' => 'assets/images/cover-img-header.png'
)
)
),
),
);
Now, it seems very good
My proposal for the array structure:
$htmlArray = ['tag' => ['name' => 'ul'],
'attrs' => [['name' => 'class','value' => 'beautiful_list'],
['name' => 'id', 'value' => 'unique_list']],
'text' => ['tag' => ['name' => 'li'
'text' => 'item 1'],
'tag' => ['name' => 'li'
'text' => 'item 2']]];
I hope this is somewhat clear?
These two is equivalent:
array()
[]

Laravel administrator before_save() is not firing

I am getting userid from sentry and when creating or updating records, I need to update user_id to the posts too. I am using before_save() callback on the config.Sentry::getUser()->id is working correctly(i checked the function on routes and it is correctly providing user_id). While creating a post through administrator, user_id is not being updated and hence the error.
/**
* app/config/administrator/posts.php
*/
return array(
'title' => 'Posts',
'single' => 'post',
'model' => 'Post',
/**
* The display columns
*/
'columns' => array(
'user' => array(
'title' => 'User',
'relationship' => 'user',
'select' => "(:table).email",
),
'category' => array(
'title' => 'Category',
'relationship' => 'category',
'select' => "(:table).name",
),
'pricing' => array(
'title' => 'Pricing',
'relationship' => 'pricing',
'select' => "(:table).name",
),
'name' => array(
'title' => 'Name',
'select' => "name",
),
'title' => array(
'title' => 'Title',
'select' => "title",
),
'description' => array(
'title' => 'Description',
'select' => "description",
),
'order' => array(
'title' => 'Order',
'select' => "order_value",
),
'active_date' => array(
'title' => 'Start',
'select' => "active_date",
),
'expiry_date' => array(
'title' => 'End',
'select' => "expiry_date",
),
'status' => array(
'title' => 'Status',
'select' => "status",
)
),
/**
* The filter set
*/
// 'filters' => array(
// 'name' => array(
// 'title' => 'Name',
// ),
// 'description' => array(
// 'title' => 'Description',
// 'type' => "text",
// )
// ),
'before_save' => function(&$data)
{
$data['user_id'] = Sentry::getUser()->id;
// return $data;
},
/**
* The editable fields
*/
'edit_fields' => array(
'category' => array(
'title' => 'Category',
'type' => 'relationship',
'name_field' => "name",
),
'pricing' => array(
'title' => 'Pricing',
'type' => 'relationship',
'name_field' => "name",
),
'name' => array(
'title' => 'Name',
'type' => "text",
),
'title' => array(
'title' => 'Title',
'type' => "text",
),
'description' => array(
'title' => 'Description',
'type' => "textarea",
),
'active_date' => array(
'title' => 'Start',
'type' => "date",
),
'expiry_date' => array(
'title' => 'End',
'type' => "date",
),
'status' => array(
'title' => 'Status',
'type' => "bool",
)
),
);
Supposing this is administrator's bug or my ignorance, I solved this with another method. Into posts model, I created events for creating and updating posts:
public static function boot()
{
parent::boot();
static::creating(function($post)
{
$post->user_id = Sentry::getUser()->id;
});
static::updating(function($post)
{
$post->user_id = Sentry::getUser()->id;
});
}

Drupal widget not saving field values [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
I'm new to Drupal but have been given the task of creating a widget.
The module loads, fields are displayed, but when I create some content the form values are not being stored when the content is being saved.
.install file:
function cloudinary_field_schema($field) {
$columns = array(
'publicID' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE),
'url' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE),
'caption' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE),
'alt' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE),
'credit' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE)
);
return array(
'columns' => $columns,
'indexes' => array(),
);
}
.module file:
/**
* Implements hook_field_info().
* define the field type
*/
function cloudinary_field_info() {
return array(
'cloudinary' => array(
'label' => t('Cloudinary image selector'),
'description' => t('Search for images and select one for display.'),
'default_widget' => 'cloudinary_widget',
'default_formatter' => 'cloudinary_formatter',
'settings' => array(),
'instance_settings' => array(),
)
);
}
/**
* This is the dropdown options for widget
*/
function cloudinary_field_widget_info() {
return array(
'cloudinary_widget' => array(
'label' => t('Default'),
'field types' => array('cloudinary', 'text'),
'behaviours' => array('multiple values' => 'FIELD_BEHAVIOUR_DEFAULT'),
)
);
}
/**
*/
function cloudinary_field_widget_form(&$form, &$form_state, $field, $instance, $lang, $items, $delta, $element) {
$element += array(
'#type' => 'fieldset',
);
$item =& $items[$delta];
$element['field_cloudinary_publicID'] = array(
'#title' => t('Public ID'),
'#type' => 'textfield',
'#required' => TRUE,
'#default_value' => isset($item['field_cloudinary_publicID']) ? $item['field_cloudinary_publicID'] : '',
);
$element['field_cloudinary_url'] = array(
'#title' => t('Url'),
'#type' => 'textfield',
'#required' => TRUE,
'#default_value' => isset($item['field_cloudinary_url']) ? $item['field_cloudinary_url'] : '',
);
$element['field_cloudinary_caption'] = array(
'#title' => t('Caption'),
'#type' => 'textfield',
'#required' => TRUE,
'#default_value' => isset($item['field_cloudinary_caption']) ? $item['field_cloudinary_caption'] : '',
);
$element['field_cloudinary_alt'] = array(
'#title' => t('Alt'),
'#type' => 'textfield',
'#required' => TRUE,
'#default_value' => isset($item['field_cloudinary_alt']) ? $item['field_cloudinary_alt'] : '',
);
$element['field_cloudinary_credit'] = array(
'#title' => t('Credit'),
'#type' => 'textfield',
'#required' => TRUE,
'#default_value' => isset($item['field_cloudinary_credit']) ? $item['field_cloudinary_credit'] : '',
);
return $element;
}
function cloudinary_field_is_empty($item, $field) {
$flag = FALSE;
foreach ($item as $key => $value) {
if(empty($key[$value])) {
$flag = TRUE;
}
}
return !$flag;
}
function cloudinary_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {
foreach ($items as $delta => $item) {
if (!isset($item['field_cloudinary_publicID']) ||
!isset($item['field_cloudinary_url']) ||
!isset($item['field_cloudinary_caption']) ||
!isset($item['field_cloudinary_alt']) ||
!isset($item['field_cloudinary_credit'])) {
$errors[$field['field_name']][$langcode][$delta][] = array(
'error' => 'cloudinary_fields_missing',
'message' => t('%title: Make sure all fields are completed. '.
'Make sure all fiends are entered.',
array('%title' => $instance['label'])
),
);
}
}
}
function cloudinary_field_widget_error($element, $error, $form, &$form_state) {
switch ($error['error']) {
case 'cloudinary_fields_missing':
form_error($element, $error['message']);
break;
}
}
function cloudinary_field_formatter_info() {
return array(
'cloudinary_formatter' => array(
'label' => t('Default'),
'field types' => array('cloudinary'),
),
);
}
function cloudinary_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
foreach ($items as $delta => $item) {
$element[$delta] = cloudinary_format_field($item);
}
return $element;
}
function poutine_maker_format_field($item) {
$element = array(
'#type' => 'container',
'#attributes' => array( 'class' => array( 'field-item') ),
);
$element['field_cloudinary_publicID'] = array(
'label' => array(
'#type' => 'container',
'#attributes' => array( 'class' => array( 'field-label' )),
'text' => array(
'#markup' => t('Public ID'),
),
),
'item' => array(
'#type' => 'container',
'#attributes' => array( 'class' => array( 'field-item') ),
'text' => array(
'#markup' => $item['field_cloudinary_publicID'],
),
),
);
$element['field_cloudinary_url'] = array(
'label' => array(
'#type' => 'container',
'#attributes' => array( 'class' => array( 'field-label' )),
'text' => array(
'#markup' => t('Image Url'),
),
),
'item' => array(
'#type' => 'container',
'#attributes' => array( 'class' => array( 'field-item') ),
'text' => array(
'#markup' => $item['field_cloudinary_url'],
),
),
);
$element['field_cloudinary_caption'] = array(
'label' => array(
'#type' => 'container',
'#attributes' => array( 'class' => array( 'field-label' )),
'text' => array(
'#markup' => t('Image Caption'),
),
),
'item' => array(
'#type' => 'container',
'#attributes' => array( 'class' => array( 'field-item') ),
'text' => array(
'#markup' => $item['field_cloudinary_caption'],
),
),
);
$element['field_cloudinary_alt'] = array(
'label' => array(
'#type' => 'container',
'#attributes' => array( 'class' => array( 'field-label' )),
'text' => array(
'#markup' => t('Image Alt'),
),
),
'item' => array(
'#type' => 'container',
'#attributes' => array( 'class' => array( 'field-item') ),
'text' => array(
'#markup' => $item['field_cloudinary_alt'],
),
),
);
$element['field_cloudinary_credit'] = array(
'label' => array(
'#type' => 'container',
'#attributes' => array( 'class' => array( 'field-label' )),
'text' => array(
'#markup' => t('Image Credit'),
),
),
'item' => array(
'#type' => 'container',
'#attributes' => array( 'class' => array( 'field-item') ),
'text' => array(
'#markup' => $item['field_cloudinary_credit'],
),
),
);
return $element;
}
function cloudinary_format_canvas_field($item) {
drupal_add_js(drupal_get_path('module', 'cloudinary') . '/cloudinary.js');
}
You need to implement hook_field_schema in your .install file.
// Something like this
function cloudinary_field_schema($field) {
// $field['type']
return array(
'columns' => array(
'column_name' => array(
'type' => 'float',
'size' => 'big',
'not null' => TRUE,
'default' => 0,
),
)
);
}
It was a logic problem in cloudinary_field_is_empty(). It was always returning false. All working fine now! Thanks for your help Zolyboy!

Categories