Place holder disables the requirements check in contact form 7 - placeholder

I've been looking for all sorts of solutions and nothing seems to work.
I've tried adding a placeholder tag via a script, I've tried changing the filter number in the php file I've tried disabling all other plugins from the form page.
Nothing worked.
So here's the problem. If I add a placeholder to the input field text it will disable the requirements check on those input fields. As if the placeholder is seen as input.
I have no idea how to fix it. Please help.
You can see the form at https://www.breuerscobelens.nl/offerte/ if you select "Een energielabel voor één adres" and then choose "Woning" you'll see the input fields I've talking about the quickest.
Another thing I'm bumping into is I want the form to automatically go to step two after selection of an option, but even though I've put in place the code I got from the plugin help it still doesn't work.
Any help with this would also be much appreciated.
Code of the form in contact form 7
<h5 class="pt-cv-title"><strong>Vraag in drie eenvoudige stappen uw offerte aan</strong></h5>
<br>
[step title "Start" next "volgende stap" previous "vorige stap"]
<h8><strong>Waarvoor ontvangt u graag een offerte?</h8></strong>
[select* stap1-aanvraag first_as_label "Maak uw keuze" "Een energielabel voor één adres" "Energielabels voor meerdere adressen" "Een andere dienst"]
[step title "Enkele vragen voor de scherpste offerte"]
[group energielabel-group]
<h8><strong>Betreft het een woning of een bedrijfsgebouw?</h8></strong>
[select* stap2-energielabel-soortgebouw first_as_label "Maak uw keuze" "Woning" "Bedrijfsgebouw" "Combinatie woning/bedrijfsgebouw"]
<br>
[group energielabel-woning-group]
<h8><strong>Wat is het adres van de woning?</strong></h8>
[text* stap2-energielabel-woning-opname-adres placeholder "Straat en huisnummer*"]
[text* stap2-energielabel-woning-opname-postcode placeholder "Postcode*"]
[text* stap2-energielabel-woning-opname-plaats placeholder "Plaats"]
<br>
<h8><strong>Door onderstaande drie vragen te beantwoorden helpt u ons een zo scherp mogelijke offerte te maken!</strong></h8>
Wat is ongeveer de oppervlakte van de woning?
[select stap2-energielabel-woning-opname-oppervlakte first_as_label "Ik heb echt geen idee" "<50m²" "50-150m²" "150-300m²" ">500m²"]
Zijn er bouwtekeningen met maatvoering beschikbaar?
[select stap2-energielabel-woning-opname-bouwtekeningen first_as_label "Dat weet ik niet" "Jazeker!" "Nee, helaas"]
Is er ergens in de woning sprake van koeling zoals een airco of een warmtepomp?
[select stap2-energielabel-woning-opname-koeling first_as_label "Ik heb echt geen idee" "Nee" "Ja" "Ja, maar deze is buiten werking" ]
<br>
[/group]
[group energielabel-bedrijfsgebouw-group]
<h8><strong>Wat is het adres?</strong></h8>
[text* stap2-energielabel-bedrijf-opname-adres placeholder "Straat en huisnummer*"]
[text* stap2-energielabel-bedrijf-opname-postcode placeholder "Postcode*"]
[text* stap2-energielabel-bedrijf-opname-plaats placeholder "Plaats*"]
<br>
<h8><strong>Door onderstaande twee vragen te beantwoorden helpt u ons een zo scherp mogelijke offerte te maken!</strong></h8>
Wat is ongeveer de oppervlakte, minus een eventuele onverwarmde industriële opslag- of productiehal?
[select stap2-energielabel-bedrijf-opname-oppervlakte first_as_label "Ik heb echt geen idee" "<100m²" "100-250m²" "250-500m²" "500-1000m²" "1000-2000m²" "2000-3000m²" "3000-5000m²" "5000-7000m²" "7000-10.000m²" ">10.000m²"]
Zijn er bouwtekeningen met maatvoering beschikbaar?
[select stap2-energielabel-bedrijf-opname-bouwtekeningen first_as_label "Dat weet ik niet" "Jazeker!" "Nee, helaas"]
<br>
[/group]
[/group]
[group energielabels-group]
Om hoeveel woonadressen gaat het ongeveer? [number stap2-energielabels-aantal-woonadressen min:0 max:100000 "0"]
Om hoeveel bedrijfsadressen gaat het ongeveer? [number stap2-energiealabels-aantal-bedrijfsadressen min:0 max:10000 "0"]
[/group]
[group anderedienst-group]
Voor welke dienst wenst u een offerte te ontvangen? [textarea stap2-anderedienst placeholder "Gewenste dienst"]
[/group]
[step title "Tenaamstelling offerte"]
<h8><strong>Tot slot, aan wie mogen we de offerte richten?</strong></h8>
In de hoop dat de offerte naar wens is, zal na oplevering van de werkzaamheden ook de factuur aldus geadresseerd worden.
[select* stap3-offerte-tenaamstelling first_as_label "Maak uw keuze" "Aan een particulier persoon" "Aan een bedrijf of instelling" ]
<br>
[group tenaamstelling-particulier-group]
[select* stap3-particulier-aanhef first_as_label "Maak uw keuze*" "heer" "mevrouw"]
[text* stap3-particulier-voorletters placeholder "Voorletters*"]
[text* stap3-particulier-achternaam placeholder "Achternaam*"]
[tel* stap3-particulier-telefoonnummer placeholder "Telefoonnummer*"]
[email* stap3-particulier-e-mail placeholder "E-mail adres*"]
<br>
[group energielabel-group]
Is het offerte adres gelijk aan het adres waar u een energielabel voor aanvraagt?
[select* stap3-particulier-gelijk-adres "Ja" "Nee" ]
<br>
[/group]
[group particulier-afwijkend-adres-group]
Wat is het offerte adres?
[text* stap3-particulier-adres placeholder "Straat en huisnummer*"]
[text* stap3-particulier-postcode placeholder "Postcode*"]
[text* stap3-particulier-plaats placeholder "Plaats*"]
<br>
[/group]
[checkbox nieuwsbriefontvangen default:0 "Ik schrijf me graag direct in voor de nieuwsbrief"]
[/group]
[group tenaamstelling-bedrijf-group]
<h8><strong>Uw gegevens</strong></h8>
[select* stap3-bedrijf-aanhef first_as_label "Maak uw keuze*" "heer" "mevrouw"]
[text* stap3-bedrijf-voorletters placeholder "Voorletters*"]
[text* stap3-bedrijf-achternaam placeholder "Achternaam*"]
[tel* stap3-bedrijf-telefoonnummer placeholder "Telefoonnummer*"]
[email* stap3-bedrijf-e-mail placeholder "E-mail adres*"]
<br>
<h8><strong>Bedrijfsgegevens</strong></h8>
[text* stap3-bedrijf-bedrijfsnaam placeholder "Bedrijfsnaam*"]
[text stap3-bedrijf-kvk placeholder "KvK nr"]
[text stap3-bedrijf-e-mail-facturatie placeholder "Optioneel afwijkend e-mailadres alleen voor factuur"]
[group energielabel-group]
Is het bedrijfsadres gelijk aan het adres waar u een energielabel voor aanvraagt?
[select* stap3-bedrijf-gelijk-adres "Ja" "Nee" ]
<br>
[/group]
[group bedrijf-afwijkend-adres-group]
<h8><strong>Wat is het bedrijfsadres voor de offerte tenaamstelling?</h8></strong>
[text* stap3-bedrijf-adres placeholder "Straat en huisnummer*"]
[text* stap3-bedrijf-postcode placeholder "Postcode*"]
[text* stap3-bedrijf-plaats placeholder "Plaats*"]
<br>
[/group]
[checkbox nieuwsbriefontvangen default:1 "Nieuwsbrief ontvangen"]
[/group]
[submit "Verstuur mijn aanvraag!"]
[group particulier-gelijk-adres-group][/group]
[group bedrijf-gelijk-adres-group][/group]
Requirement field error code.
<?php
/**
** A base module for the following types of tags:
** [text] and [text*] # Single-line text
** [email] and [email*] # Email address
** [url] and [url*] # URL
** [tel] and [tel*] # Telephone number
**/
/* form_tag handler */
add_action( 'wpcf7_init', 'wpcf7_add_form_tag_text', 10, 0 );
function wpcf7_add_form_tag_text() {
wpcf7_add_form_tag(
array( 'text', 'text*', 'email', 'email*', 'url', 'url*', 'tel', 'tel*' ),
'wpcf7_text_form_tag_handler',
array(
'name-attr' => true,
)
);
}
function wpcf7_text_form_tag_handler( $tag ) {
if ( empty( $tag->name ) ) {
return '';
}
$validation_error = wpcf7_get_validation_error( $tag->name );
$class = wpcf7_form_controls_class( $tag->type, 'wpcf7-text' );
if ( in_array( $tag->basetype, array( 'email', 'url', 'tel' ) ) ) {
$class .= ' wpcf7-validates-as-' . $tag->basetype;
}
if ( $validation_error ) {
$class .= ' wpcf7-not-valid';
}
$atts = array();
$atts['size'] = $tag->get_size_option( '40' );
$atts['maxlength'] = $tag->get_maxlength_option();
$atts['minlength'] = $tag->get_minlength_option();
if ( $atts['maxlength'] and $atts['minlength']
and $atts['maxlength'] < $atts['minlength'] ) {
unset( $atts['maxlength'], $atts['minlength'] );
}
$atts['class'] = $tag->get_class_option( $class );
$atts['id'] = $tag->get_id_option();
$atts['tabindex'] = $tag->get_option( 'tabindex', 'signed_int', true );
$atts['autocomplete'] = $tag->get_option( 'autocomplete',
'[-0-9a-zA-Z]+', true );
if ( $tag->has_option( 'readonly' ) ) {
$atts['readonly'] = 'readonly';
}
if ( $tag->is_required() ) {
$atts['aria-required'] = 'true';
}
if ( $validation_error ) {
$atts['aria-invalid'] = 'true';
$atts['aria-describedby'] = wpcf7_get_validation_error_reference(
$tag->name
);
} else {
$atts['aria-invalid'] = 'false';
}
$value = (string) reset( $tag->values );
if ( $tag->has_option( 'placeholder' )
or $tag->has_option( 'watermark' ) ) {
$atts['placeholder'] = $value;
$value = '';
}
$value = $tag->get_default_option( $value );
$value = wpcf7_get_hangover( $tag->name, $value );
$atts['value'] = $value;
if ( wpcf7_support_html5() ) {
$atts['type'] = $tag->basetype;
} else {
$atts['type'] = 'text';
}
$atts['name'] = $tag->name;
$atts = wpcf7_format_atts( $atts );
$html = sprintf(
'<span class="wpcf7-form-control-wrap %1$s"><input %2$s />%3$s</span>',
sanitize_html_class( $tag->name ), $atts, $validation_error
);
return $html;
}
/* Validation filter */
add_filter( 'wpcf7_validate_text', 'wpcf7_text_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_text*', 'wpcf7_text_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_email', 'wpcf7_text_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_email*', 'wpcf7_text_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_url', 'wpcf7_text_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_url*', 'wpcf7_text_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_tel', 'wpcf7_text_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_tel*', 'wpcf7_text_validation_filter', 10, 2 );
function wpcf7_text_validation_filter( $result, $tag ) {
$name = $tag->name;
$value = isset( $_POST[$name] )
? trim( wp_unslash( strtr( (string) $_POST[$name], "\n", " " ) ) )
: '';
if ( 'text' == $tag->basetype ) {
if ( $tag->is_required() and '' === $value ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_required' ) );
}
}
if ( 'email' == $tag->basetype ) {
if ( $tag->is_required() and '' === $value ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_required' ) );
} elseif ( '' !== $value and ! wpcf7_is_email( $value ) ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_email' ) );
}
}
if ( 'url' == $tag->basetype ) {
if ( $tag->is_required() and '' === $value ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_required' ) );
} elseif ( '' !== $value and ! wpcf7_is_url( $value ) ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_url' ) );
}
}
if ( 'tel' == $tag->basetype ) {
if ( $tag->is_required() and '' === $value ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_required' ) );
} elseif ( '' !== $value and ! wpcf7_is_tel( $value ) ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_tel' ) );
}
}
if ( '' !== $value ) {
$maxlength = $tag->get_maxlength_option();
$minlength = $tag->get_minlength_option();
if ( $maxlength and $minlength and $maxlength < $minlength ) {
$maxlength = $minlength = null;
}
$code_units = wpcf7_count_code_units( stripslashes( $value ) );
if ( false !== $code_units ) {
if ( $maxlength and $maxlength < $code_units ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_too_long' ) );
} elseif ( $minlength and $code_units < $minlength ) {
$result->invalidate( $tag, wpcf7_get_message( 'invalid_too_short' ) );
}
}
}
return $result;
}
/* Messages */
add_filter( 'wpcf7_messages', 'wpcf7_text_messages', 10, 1 );
function wpcf7_text_messages( $messages ) {
$messages = array_merge( $messages, array(
'invalid_email' => array(
'description' =>
__( "Email address that the sender entered is invalid", 'contact-form-7' ),
'default' =>
__( "The e-mail address entered is invalid.", 'contact-form-7' ),
),
'invalid_url' => array(
'description' =>
__( "URL that the sender entered is invalid", 'contact-form-7' ),
'default' =>
__( "The URL is invalid.", 'contact-form-7' ),
),
'invalid_tel' => array(
'description' =>
__( "Telephone number that the sender entered is invalid", 'contact-form-7' ),
'default' =>
__( "The telephone number is invalid.", 'contact-form-7' ),
),
) );
return $messages;
}
/* Tag generator */
add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_text', 15, 0 );
function wpcf7_add_tag_generator_text() {
$tag_generator = WPCF7_TagGenerator::get_instance();
$tag_generator->add( 'text', __( 'text', 'contact-form-7' ),
'wpcf7_tag_generator_text' );
$tag_generator->add( 'email', __( 'email', 'contact-form-7' ),
'wpcf7_tag_generator_text' );
$tag_generator->add( 'url', __( 'URL', 'contact-form-7' ),
'wpcf7_tag_generator_text' );
$tag_generator->add( 'tel', __( 'tel', 'contact-form-7' ),
'wpcf7_tag_generator_text' );
}
function wpcf7_tag_generator_text( $contact_form, $args = '' ) {
$args = wp_parse_args( $args, array() );
$type = $args['id'];
if ( ! in_array( $type, array( 'email', 'url', 'tel' ) ) ) {
$type = 'text';
}
if ( 'text' == $type ) {
$description = __( "Generate a form-tag for a single-line plain text input field. For more details, see %s.", 'contact-form-7' );
} elseif ( 'email' == $type ) {
$description = __( "Generate a form-tag for a single-line email address input field. For more details, see %s.", 'contact-form-7' );
} elseif ( 'url' == $type ) {
$description = __( "Generate a form-tag for a single-line URL input field. For more details, see %s.", 'contact-form-7' );
} elseif ( 'tel' == $type ) {
$description = __( "Generate a form-tag for a single-line telephone number input field. For more details, see %s.", 'contact-form-7' );
}
$desc_link = wpcf7_link( __( 'https://contactform7.com/text-fields/', 'contact-form-7' ), __( 'Text fields', 'contact-form-7' ) );
?>
<div class="control-box">
<fieldset>
<legend><?php echo sprintf( esc_html( $description ), $desc_link ); ?></legend>
<table class="form-table">
<tbody>
<tr>
<th scope="row"><?php echo esc_html( __( 'Field type', 'contact-form-7' ) ); ?></th>
<td>
<fieldset>
<legend class="screen-reader-text"><?php echo esc_html( __( 'Field type', 'contact-form-7' ) ); ?></legend>
<label><input type="checkbox" name="required" /> <?php echo esc_html( __( 'Required field', 'contact-form-7' ) ); ?></label>
</fieldset>
</td>
</tr>
<tr>
<th scope="row"><label for="<?php echo esc_attr( $args['content'] . '-name' ); ?>"><?php echo esc_html( __( 'Name', 'contact-form-7' ) ); ?></label></th>
<td><input type="text" name="name" class="tg-name oneline" id="<?php echo esc_attr( $args['content'] . '-name' ); ?>" /></td>
</tr>
<tr>
<th scope="row"><label for="<?php echo esc_attr( $args['content'] . '-values' ); ?>"><?php echo esc_html( __( 'Default value', 'contact-form-7' ) ); ?></label></th>
<td><input type="text" name="values" class="oneline" id="<?php echo esc_attr( $args['content'] . '-values' ); ?>" /><br />
<label><input type="checkbox" name="placeholder" class="option" /> <?php echo esc_html( __( 'Use this text as the placeholder of the field', 'contact-form-7' ) ); ?></label></td>
</tr>
<?php if ( in_array( $type, array( 'text', 'email', 'url' ) ) ) : ?>
<tr>
<th scope="row"><?php echo esc_html( __( 'Akismet', 'contact-form-7' ) ); ?></th>
<td>
<fieldset>
<legend class="screen-reader-text"><?php echo esc_html( __( 'Akismet', 'contact-form-7' ) ); ?></legend>
<?php if ( 'text' == $type ) : ?>
<label>
<input type="checkbox" name="akismet:author" class="option" />
<?php echo esc_html( __( "This field requires author's name", 'contact-form-7' ) ); ?>
</label>
<?php elseif ( 'email' == $type ) : ?>
<label>
<input type="checkbox" name="akismet:author_email" class="option" />
<?php echo esc_html( __( "This field requires author's email address", 'contact-form-7' ) ); ?>
</label>
<?php elseif ( 'url' == $type ) : ?>
<label>
<input type="checkbox" name="akismet:author_url" class="option" />
<?php echo esc_html( __( "This field requires author's URL", 'contact-form-7' ) ); ?>
</label>
<?php endif; ?>
</fieldset>
</td>
</tr>
<?php endif; ?>
<tr>
<th scope="row"><label for="<?php echo esc_attr( $args['content'] . '-id' ); ?>"><?php echo esc_html( __( 'Id attribute', 'contact-form-7' ) ); ?></label></th>
<td><input type="text" name="id" class="idvalue oneline option" id="<?php echo esc_attr( $args['content'] . '-id' ); ?>" /></td>
</tr>
<tr>
<th scope="row"><label for="<?php echo esc_attr( $args['content'] . '-class' ); ?>"><?php echo esc_html( __( 'Class attribute', 'contact-form-7' ) ); ?></label></th>
<td><input type="text" name="class" class="classvalue oneline option" id="<?php echo esc_attr( $args['content'] . '-class' ); ?>" /></td>
</tr>
</tbody>
</table>
</fieldset>
</div>
<div class="insert-box">
<input type="text" name="<?php echo $type; ?>" class="tag code" readonly="readonly" onfocus="this.select()" />
<div class="submitbox">
<input type="button" class="button button-primary insert-tag" value="<?php echo esc_attr( __( 'Insert Tag', 'contact-form-7' ) ); ?>" />
</div>
<br class="clear" />
<p class="description mail-tag"><label for="<?php echo esc_attr( $args['content'] . '-mailtag' ); ?>"><?php echo sprintf( esc_html( __( "To use the value input through this field in a mail field, you need to insert the corresponding mail-tag (%s) into the field on the Mail tab.", 'contact-form-7' ) ), '<strong><span class="mail-tag"></span></strong>' ); ?><input type="text" class="mail-tag code hidden" readonly="readonly" id="<?php echo esc_attr( $args['content'] . '-mailtag' ); ?>" /></label></p>
</div>
<?php
}
Code to go to next step automatically
/**
* Validate the current step, and move to step number `step` if validation passes.
* #memberof wpcf7cf
* #param {String|JQuery} $form - JQuery object or css-selector representing the form
* #param {Number} step
*/
async multistepMoveToStepWithValidation(3925, 1) {
const multistep = wpcf7cf.getMultiStepObj(3925);
var result = await multistep.validateStep(multistep.currentStep);
if (result === 'success') {
multistep.moveToStep(2);
}
},
};

I have found the issue.
In the theme there was a function for the sitesearch. It said that if the field was empty the placeholder should be send in as input. Insane. So I disabled that piece of code and now it's working perfectly.

Related

RedBeanPhP dispense doesn't fill the table, but create it

I'm creating a comment table. So RedBean create a table but doesn't fill it with information
My code
if (isset($_POST['send'])) {
$comments = R::dispense('comments');
var_dump($comments);
$comments['id'] = $_GET['id'];
$comments->firstName = $_SESSION['first_name'];
$comments->lastName = $_SESSION['last_name'];
$comments->message = $_POST['message'];
$comments->avatar = $_SESSION['avatar'];
R::store($comments);
My form
<form action="" id="commentForm" method="post">
<div class="col-md-6">
<input type="text" placeholder="Ваш комментарий" class="mb-3 mt-3 form-control" name="message" minlength="5" required>
</div>
<div class="col-md-6" style="margin-bottom: 1rem;">
<input type="submit" class="btn btn-primary" name="send">
All fields are filled, but it doesn't work how i want
//Define your mappings like this
define( 'POEM', 'tbl_poem' );
define( 'BOOK', 'tbl_book' );
define( 'AUTHOR', 'tbl_author' );
define( 'CATEGORY', 'tbl_category' );
define( 'POEMS', 'ownTblPoem' );
define( 'CATEGORIES', 'sharedTblCategory' );
//Create an extension to by-pass security check in R::dispense
R::ext('xdispense', function( $type ){
return R::getRedBean()->dispense( $type );
});
//Use tbl_book_category instead of tbl_book_tbl_category
R::renameAssociation([
'tbl_book_tbl_category' => 'tbl_book_category'
]);
//Use them like this:
$poem = R::xdispense( POEM );
$poem->title = 'Trees';
$author = R::xdispense( AUTHOR );
$author->name = 'Joyce Kilmer';
$book = R::xdispense( BOOK );
$book->title = 'Trees and other poems';
$category = R::xdispense( CATEGORY );
$category->name = 'nature';
$book->{AUTHOR} = $author;
$book->{POEMS}[] = $poem;
$book->{CATEGORIES}[] = $category;
$id = R::store( $book );
//For testing purposes let's output something:
$book = R::load( BOOK, $id );
$poem = reset( $book->{POEMS} );
$author = $book->{AUTHOR};
$category = reset( $book->{CATEGORIES} );
echo "Have you ever read '{$poem->title}' ({$book->title}) by {$author->name} ?
it's a beautiful poem about {$category->name}.";

Yii2 generate 3 column table using foreach

how do i generate only 3 columns in a page using below code
if i keep echo'(table)' inside it generates the whole table so i want only one table
allow only 3 columns in a page after 3 columns append a new row
<?php
$i = 0;
echo '<table style="float: left;width: -weekbit-fill-available"; ><tr>';
?>
<?php foreach ($product as $p) {
$i++;
// $i++;
echo "<tr><td>Name:<b>". $p->name ."</td></tr>";
echo "<tr><td>productID:<b>".$p->proid ."</td></tr>";
echo "<tr><td>Price:<b>". $p->price ."</td></tr>";
echo "<tr><td><a href='/cart/cart/add?id=$p->proid'><input type='button' value='addtocart'/></td></tr>";
if($i==3){
echo '</tr><tr>';
}
echo"</tr>
</table>";
?>
<?php }?>
<?php echo"</tr>
</table>"?>
thanks in advance
Try below
<table style="float: left; width: -weekbit-fill-available">
<tr>
<th>Name</th>
<th>ProductID</th>
<th>Price</th>
<th>Action</th>
</tr>
<?php foreach ($product as $p) : ?>
<tr>
<td><?= $p->name ?></td>
<td><?= $p->proid ?></td>
<td><?= $p->price ?></td>
<td colspan="3"><?= \yii\helpers\Html::a('addtocart',
['/cart/cart/add', 'id' => $p->proid],
[
'title' => 'Add to Cart',
'class' => 'btn btn-warning btn-sm',
]); ?></td>
</tr>
<?php endforeach; ?>
</table>
Use <tr> for each row and <td> for each column
<table style="float: left; width: -weekbit-fill-available"; >
<?php foreach ($product as $p): ?>
<tr>
<td>Name: <b><?= $p->name ?></td>
<td>productID: <b><?= $p->proid ?></td>
<td>Price: <b><?= $p->price ?></td>
<td><a href='/cart/cart/add?id=<?= $p->proid ?>'><input type='button' value='addtocart'/></td>
</tr>
<?php endforeach; ?>
</table>";
See also:
HTML tables https://www.w3schools.com/html/html_tables.asp
Yii2 GridView https://www.yiiframework.com/doc/guide/2.0/en/output-data-widgets

Ant Design - prevent table row click in specific column/area

I'm using ant design table component. I have "actions" column that I don't want the onRowClick event will trigger in this column.
How can it be done?
http://codepen.io/liron_e/pen/zZjVKZ?editors=001
const { Table, Modal } = antd;
const confirm = (id) => {
Modal.confirm({
title: 'Confirm',
content: 'Bla bla ...',
okText: 'OK',
cancelText: 'Cancel',
});
};
const info = (id) => {
Modal.info({
title: 'Info',
content: 'Bla bla ...',
okText: 'OK',
cancelText: 'Cancel',
});
};
const columns = [
{
key: 'status',
title: 'text',
dataIndex: 'text'
}, {
key: 'actions',
title: 'actions',
dataIndex: 'id',
render: (id) => {
return (
<span>
<a href="#" onClick={() => confirm(id)}>
Clone
</a>
<span className="ant-divider" />
<a href="#" onClick={() => confirm(id)}>
Replace
</a>
</span>
);
}
}
];
const dataSource = [
{
id: '1',
text: 'Hello'
},{
id: '123',
text: 'adsaddas'
},{
id: '123344',
text: 'cvbbcvb'
},{
id: '5665',
text: 'aasddasd'
},
];
ReactDOM.render(
<div>
<Table
columns={columns}
onRowClick={() => this.info()}
dataSource={dataSource}
/>
</div>
, mountNode);
As you can try when pressing on row the info modal would open.
When pressing some action the info and the confirm modals would open, and I would like that only confirm modal would open.
Thanks (:
In your render function:
render: (id) => {
return (
<span>
<a href="#" onClick={(e) => {
e.stopPropagation();
confirm(id);
}}>
Clone
</a>
<span className="ant-divider" />
<a href="#" onClick={() => confirm(id)}>
Replace
</a>
</span>
);
}
Just stop propagation in your action handler:
<span>
<a href="#" onClick={() => confirm(id)}>
Clone
</a>
<span className="ant-divider" />
<a href="#" onClick={() => confirm(id)}>
Replace
</a>
</span>
<Menu.Item onClick={(e)=>{
e.domEvent.stopPropagation();
handleUpdate(id)}}>
Edit
</Menu.Item>
Using react Link we can have a default anchor link functionality by stoping event propagation and trigger event on particular column.
"react-router": "^5.2.0",
import { Link } from "react-router-dom";
render: (value, record) => {
// Conditional checks if needs to handle on particular set of column
return (
<Link to={'TARGET_LINK_HERE'}
target="_blank" rel="noopener noreferrer"
onClick={(event) => {
event.stopPropagation(); // prevent event to propogate to parent to have row click which is default functionality
}}>{value}</Link>
)
}

How insert array values with foreach in opencart?

My case similar with this Insert array values with foreach using codeigniter (user input by dynamically adding and removing fields).
But it's CI, I trying in open cart, so I build function insert and passing value(in array) and performs for each in model.
What I want insert is product this for code Controller :
// check request and store to array
if(isset($this->request->get['product']))
{
$product = $this->request->get['product'];
$product2 = array();
foreach($product as $p)
{
$product2[] = $p;
}
}
else
{
$product = null;
}
// This for function insert
public function insert()
{
$this->language->load('item/item');
$this->document->setTitle($this->language->get('heading_title'));
$this->load->model('item/item');
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm())
{
$this->model_item_item->insert_detail($this->request->post);
$this->session->data['success'] = $this->language->get('text_success');
$this->redirect($this->url->link('item/item', 'token=' . $this->session->data['token'], 'SSL'));
}
}
This is for Model :
public function insert_detail($product2)
{
foreach($product2 as $detail)
{
$this->db->query("INSERT INTO " . DB_PREFIX . "show_product_detail SET product_id = '". $this->db->escape($detail['product']) . "'");
}
}
This for View :
<?php echo $header; ?>
<div id="content">
<div class="breadcrumb">
<?php foreach ($breadcrumbs as $breadcrumb) { ?>
<?php echo $breadcrumb['separator']; ?><?php echo $breadcrumb['text']; ?>
<?php } ?>
</div>
<?php if ($error_warning) { ?>
<div class="warning"><?php echo $error_warning; ?></div>
<?php } ?>
<?php if ($success) { ?>
<div class="success"><?php echo $success; ?></div>
<?php } ?>
<div class="box">
<div class="heading">
<h1><img src="view/image/product.png" alt="" /> <?php echo $heading_title; ?></h1>
<div class="buttons"><a onclick="$('#form').submit();" class="button"><?php echo $button_save; ?></a><?php echo $button_cancel; ?></div>
</div>
<div class="content">
<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form">
<table class="form">
<tr>
<td><span class="required">*</span> <?php echo $entry_head; ?></td>
<td><input type="text" name="head_text_field" value="" placeholder="Input Head Text" size="40"/>
<?php if ($error_head) { ?>
<span class="error"><?php echo $error_head; ?></span>
<?php } ?>
</td>
</tr>
<tr>
<td><span class="required">*</span> <?php echo $entry_title; ?></td>
<td><textarea name="title_text_field" placeholder="Input Title Text" style="width:230px;"/></textarea>
<?php if ($error_title) { ?>
<span class="error"><?php echo $error_title; ?></span>
<?php } ?>
</td>
</tr>
<tr>
<td><?php echo $entry_max_item; ?></td>
<td>
<select name="max" id="maxitem">
<?php
for($i=1; $i<=6; $i++)
{
if($i == 1)
echo "<option selected='selected' value=".$i.">".$i."</option>";
else
echo "<option value=".$i.">".$i."</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td><?php echo $entry_product; ?></td>
<td><input type="text" id="product" name="product" value="" placeholder="Input Product" size="40"/></td>
</tr>
<tr>
<td></td>
<td>
<table>
<tr>
<td><input type="button" id="ADD" value="Add Item"></td>
<td><input type="reset" id="RESET" value="Reset"></td>
</tr>
</table>
</td>
</tr>
<tr>
</tr>
</table>
<table border="1" id="tblname" cellpadding="5" cellspacing="5">
<thead>
<tr>
<td>
Total Item
</td>
<td>
Name Item
</td>
<td>
DELETE
</td>
<tr>
</thead>
<tbody align="center">
</tbody>
</table>
</form>
</div>
</div>
</div>
This for Javascript:
<script type="text/javascript"><!--
$('input[name=\'product\']').autocomplete({
delay: 100,
source: function(request, response) {
$.ajax({
url: 'index.php?route=catalog/product/autocomplete&token=<?php echo $token; ?>&filter_name=' + encodeURIComponent(request.term),
dataType: 'json',
success: function(json) {
response($.map(json, function(item) {
return {
label: item.name,
value: item.product_id
}
}));
}
});
},
select: function(event, ui) {
$('input[name=\'product\']').val(ui.item.label);
return false;
},
focus: function(event, ui) {
return false;
}
});
//--></script>
<Script type="text/javascript">
$(document).ready(function(){
var item = 1;
var isAllowed = 3;
var isSet = 0;
$('#ADD').click(function(){
var maxitem = parseInt($("#maxitem").val(), 10); //from max item in html
var iCount = 0;
if($('#product').val()){ // check input product
if( item <= maxitem )
{
iCount = $('#tblname tbody tr').length + 1;
szTr = "<tr><td>";
szTr = szTr + iCount + "</td>";
szTr = szTr + "<td>" +$('#product').val() +"</td>";
szTr = szTr + "<td><input type='button' class='DEL' value='DELETE'></td>";
szTr = szTr + "</tr>";
$('#tblname tbody').append(szTr);
item +=1;
isSet = 1;
restFormOpts();
}
else
{
alert ("Max Limit !!!");
}
}else{alert('Enter Product !!! ');}
});
// for delete row
$('body').on('click','#RESET', function() {
item = 1;
isAllowed = 3;
isSet = 0;
$("#maxitem").attr("disabled",false);
$('.DEL').parents('tr').remove();
});
$('body').on('click', 'input.DEL', function() {
$(this).parents('tr').remove();
item -= 1;
});
function restFormOpts()
{
if(isSet === isAllowed) {
$("#ADD").attr("disabled",true);
$("#maxitem").attr("disabled",false);
}
else {
$("#ADD").attr("disabled",false);
$("#maxitem").attr("disabled",true);
}
}
});
</script>
This code works to enter into the database , but no contents?
Where i did mistake?
Here's the correct insert statement:
$this->db->query("
INSERT INTO " . DB_PREFIX . "show_product_detail
(show_product_detail)
values ('". $this->db->escape($detail['product']) . "'");
You are putting an array in product_id field.
First you need to change product_id field type int to text and
Check with following code
public function insert_detail($product2)
{
foreach($product2 as $detail)
{
$this->db->query("INSERT INTO " . DB_PREFIX . "show_product_detail SET product_id = '". $this->db->escape(json_encode($detail)) . "'");
}
}

While data is fetched add link with href to ID

<?php
mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());
$data = mysql_query("SELECT * FROM something ORDER by date_sent DESC")
or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
Print "<table width='1200px' border='0' cellspacing='0' cellpadding='0'>";
Print "<tr id='data'>";
Print "<div class='border'>";
Print "<td width='80px'><div align='center'>".$info['case_number'] ."</div></td>";
Print "<td width='80px'><div align='center'>".$info['credit_number'] . "</div></td>";
Print "</tr>";
Print "</table>";
}
?>
I want to make case_number link to ID
I made: <td width='80px'><div align='center'> <a href='edit.php?id=".$info['id'] ."'> ".$info['case_number'] ." </a> </div></td>";
but it do not work.
Can you explain how can I make this work? Thank you

Resources