PHP tests and conditional - php

With this code I'm trying to display an event date that has a beginning and ending date, but sometimes there is only one beginning date.
If there is a beginning and ending date i need this displayed:
DU 10 JUILLET 2017 AU 10 JUILLET 2017
And if there is only a beginning date, i need this displayed:
LE 10 JUILLET 2017 (the "DU" is replace by "LE")
<?php if (isset($this->item->jcfields[3]) && !empty($this->item-jcfields[3])):
?>Du
<?php echo FieldsHelper::render('com_content.article', 'field.render',
array('field'=> $this->item->jcfields[3])); ?>
<?php endif; ?>
<?php if (isset($this->item->jcfields[7]) && !trim($this->item-
>jcfields[7])): ?>Au
<?php echo FieldsHelper::render('com_content.article', 'field.render',
array('field'=> $this->item->jcfields[7])); ?>
<?php endif; ?>

Untested, and I tried to keep your code the same while improving formatting.
<?php
if (isset($this->item->jcfields[3]) && !empty($this->item->jcfields[3]) && $this->item->jcfields[3]->value != ''):
if (isset($this->item->jcfields[7]) && !empty($this->item->jcfields[7]) && $this->item->jcfields[7]->value != ''):
echo "Du ";
else:
echo "Le ";
endif;
echo FieldsHelper::render('com_content.article', 'field.render', array('field'=> $this->item->jcfields[3]));
if (isset($this->item->jcfields[7]) && !empty($this->item->jcfields[7]) && $this->item->jcfields[7]->value != ''):
echo " Au ";
echo FieldsHelper::render('com_content.article', 'field.render', array('field'=> $this->item->jcfields[7]));
endif;
endif;

Related

Trying to get Default Value of ACF Field before post is saved

I am trying to get the Default Value of an ACF field but to no avail. I've got this code at the moment:
<section id="location-info">
<?php if( get_field('location_info') && get_field('is_airport') == false && get_field('is_railway_station') == false): ?>
<h3>Location info</h3>
<p><?php the_field('location_info') ?></p>
<?php elseif ( get_field('airport_info') && get_field('is_airport') == true && get_field('is_railway_station') == false): ?>
<h3>Airport info</h3>
<p><?php the_field('airport_info') ?></p>
<?php elseif ( get_field('railway_info') && get_field('is_airport') == false && get_field('is_railway_station') == true): ?>
<h3>Railway info</h3>
<p><?php the_field('railway_info') ?></p>
<?php elseif ( get_field('is_airport') == true && get_field('is_railway_station') == true): ?>
<h3>Airport info</h3>
<p><?php the_field('airport_info') ?></p>
<?php else: ?>
<?php if( get_field('is_airport') == false && get_field('is_railway_station') == false): ?>
<?php echo '1' ?>
<?php get_field_object('location_info') ?>
<?php the_field('location_info') ?>
<?php elseif ( get_field('is_airport') == true && get_field('is_railway_station') == false): ?>
<?php echo '2' ?>
<?php get_field_object('airport_info') ?>
<?php elseif ( get_field('is_airport') == false && get_field('is_railway_station') == true): ?>
<?php echo '3' ?>
<?php get_field_object('railway_info') ?>
<?php else: ?>
<?php echo 'No info for this location' ?>
<?php endif; ?>
<?php endif; ?>
</section>
See get_field_object('location_info'). This line is meant to grab the Default Value of the field 'Location Info' (or at least I think so) as defined in Field Groups. However, this line is returning false and will continue to return false until I open and save the post.
The big question: is there a way to get the Default Value without needing to save the post first?
You can use the acf_get_field() function to get all of the field data. This returns an array containing default_value.
acf_get_field('location_info')['default_value']
For anyone looking for this later on, I couldn't find an acf_get_field function and the get_field function didn't work.
However, if you use get_field_object, using the field key, you can get an array with all the information for the field.
get_field_object( $key);

How to modify the layout in Joomla articles?

On a Joomla 3.4 site, articles display a "details" section like this by default :
Details
Written by John Doe
Published: 26 October 2015
What file to change, (and if possible how) to get the following result ?
By John Doe, on November 4, 2015
Edit after #itoctopus answer :
you will need to change the override file. You can do that by changing the
file /templates/your-template/html/com_content/article/default.php
Below is the content of the default.php.
What should be changed to achieve the result above ? I see nothing in this file related to the "details" section.
<?php
/**
* #package Joomla.Site
* #subpackage com_content
*
* #copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
* #license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
// Create shortcuts to some parameters.
$params = $this->item->params;
$images = json_decode($this->item->images);
$urls = json_decode($this->item->urls);
$canEdit = $params->get('access-edit');
$user = JFactory::getUser();
$info = $params->get('info_block_position', 0);
JHtml::_('behavior.caption');
?>
<div class="item-page<?php echo $this->pageclass_sfx; ?>" itemscope itemtype="http://schema.org/Article">
<meta itemprop="inLanguage" content="<?php echo ($this->item->language === '*') ? JFactory::getConfig()->get('language') : $this->item->language; ?>" />
<?php if ($this->params->get('show_page_heading')) : ?>
<div class="page-header">
<h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
</div>
<?php endif;
if (!empty($this->item->pagination) && $this->item->pagination && !$this->item->paginationposition && $this->item->paginationrelative)
{
echo $this->item->pagination;
}
?>
<?php // Todo Not that elegant would be nice to group the params ?>
<?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date')
|| $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') ); ?>
<?php if (!$useDefList && $this->print) : ?>
<div id="pop-print" class="btn hidden-print">
<?php echo JHtml::_('icon.print_screen', $this->item, $params); ?>
</div>
<div class="clearfix"> </div>
<?php endif; ?>
<?php if ($params->get('show_title') || $params->get('show_author')) : ?>
<div class="page-header">
<h2 itemprop="name">
<?php if ($params->get('show_title')) : ?>
<?php echo $this->escape($this->item->title); ?>
<?php endif; ?>
</h2>
<?php if ($this->item->state == 0) : ?>
<span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span>
<?php endif; ?>
<?php if (strtotime($this->item->publish_up) > strtotime(JFactory::getDate())) : ?>
<span class="label label-warning"><?php echo JText::_('JNOTPUBLISHEDYET'); ?></span>
<?php endif; ?>
<?php if ((strtotime($this->item->publish_down) < strtotime(JFactory::getDate())) && $this->item->publish_down != JFactory::getDbo()->getNullDate()) : ?>
<span class="label label-warning"><?php echo JText::_('JEXPIRED'); ?></span>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if (!$this->print) : ?>
<?php if ($canEdit || $params->get('show_print_icon') || $params->get('show_email_icon')) : ?>
<?php echo JLayoutHelper::render('joomla.content.icons', array('params' => $params, 'item' => $this->item, 'print' => false)); ?>
<?php endif; ?>
<?php else : ?>
<?php if ($useDefList) : ?>
<div id="pop-print" class="btn hidden-print">
<?php echo JHtml::_('icon.print_screen', $this->item, $params); ?>
</div>
<?php endif; ?>
<?php endif; ?>
<?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
<?php echo JLayoutHelper::render('joomla.content.info_block.block', array('item' => $this->item, 'params' => $params, 'position' => 'above')); ?>
<?php endif; ?>
<?php if ($info == 0 && $params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
<?php $this->item->tagLayout = new JLayoutFile('joomla.content.tags'); ?>
<?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
<?php endif; ?>
<?php if (!$params->get('show_intro')) : echo $this->item->event->afterDisplayTitle; endif; ?>
<?php echo $this->item->event->beforeDisplayContent; ?>
<?php if (isset($urls) && ((!empty($urls->urls_position) && ($urls->urls_position == '0')) || ($params->get('urls_position') == '0' && empty($urls->urls_position)))
|| (empty($urls->urls_position) && (!$params->get('urls_position')))) : ?>
<?php echo $this->loadTemplate('links'); ?>
<?php endif; ?>
<?php if ($params->get('access-view')):?>
<?php if (isset($images->image_fulltext) && !empty($images->image_fulltext)) : ?>
<?php $imgfloat = (empty($images->float_fulltext)) ? $params->get('float_fulltext') : $images->float_fulltext; ?>
<div class="pull-<?php echo htmlspecialchars($imgfloat); ?> item-image"> <img
<?php if ($images->image_fulltext_caption):
echo 'class="caption"' . ' title="' . htmlspecialchars($images->image_fulltext_caption) . '"';
endif; ?>
src="<?php echo htmlspecialchars($images->image_fulltext); ?>" alt="<?php echo htmlspecialchars($images->image_fulltext_alt); ?>" itemprop="image"/> </div>
<?php endif; ?>
<?php
if (!empty($this->item->pagination) && $this->item->pagination && !$this->item->paginationposition && !$this->item->paginationrelative):
echo $this->item->pagination;
endif;
?>
<?php if (isset ($this->item->toc)) :
echo $this->item->toc;
endif; ?>
<div itemprop="articleBody">
<?php echo $this->item->text; ?>
</div>
<?php if ($useDefList && ($info == 1 || $info == 2)) : ?>
<?php echo JLayoutHelper::render('joomla.content.info_block.block', array('item' => $this->item, 'params' => $params, 'position' => 'below')); ?>
<?php if ($params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
<?php $this->item->tagLayout = new JLayoutFile('joomla.content.tags'); ?>
<?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
<?php endif; ?>
<?php endif; ?>
<?php
if (!empty($this->item->pagination) && $this->item->pagination && $this->item->paginationposition && !$this->item->paginationrelative):
echo $this->item->pagination;
?>
<?php endif; ?>
<?php if (isset($urls) && ((!empty($urls->urls_position) && ($urls->urls_position == '1')) || ($params->get('urls_position') == '1'))) : ?>
<?php echo $this->loadTemplate('links'); ?>
<?php endif; ?>
<?php // Optional teaser intro text for guests ?>
<?php elseif ($params->get('show_noauth') == true && $user->get('guest')) : ?>
<?php echo $this->item->introtext; ?>
<?php // Optional link to let them register to see the whole article. ?>
<?php if ($params->get('show_readmore') && $this->item->fulltext != null) : ?>
<?php $menu = JFactory::getApplication()->getMenu(); ?>
<?php $active = $menu->getActive(); ?>
<?php $itemId = $active->id; ?>
<?php $link = new JUri(JRoute::_('index.php?option=com_users&view=login&Itemid=' . $itemId, false)); ?>
<?php $link->setVar('return', base64_encode(JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language), false))); ?>
<p class="readmore">
<a href="<?php echo $link; ?>" class="register">
<?php $attribs = json_decode($this->item->attribs); ?>
<?php
if ($attribs->alternative_readmore == null) :
echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE');
elseif ($readmore = $this->item->alternative_readmore) :
echo $readmore;
if ($params->get('show_readmore_title', 0) != 0) :
echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));
endif;
elseif ($params->get('show_readmore_title', 0) == 0) :
echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE');
else :
echo JText::_('COM_CONTENT_READ_MORE');
echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));
endif; ?>
</a>
</p>
<?php endif; ?>
<?php endif; ?>
<?php
if (!empty($this->item->pagination) && $this->item->pagination && $this->item->paginationposition && $this->item->paginationrelative) :
echo $this->item->pagination;
?>
<?php endif; ?>
<?php echo $this->item->event->afterDisplayContent; ?>
</div>
You can do the above by CSS - but sometimes it's a bit tricky, so you will need to change the override file. You can do that by changing the file /templates/your-template/html/com_content/article/default.php
If you can't find that file (or that directory structure), then you will need to copy the this file components/com_content/views/article/tmpl/default.php to /templates/your-template/html/com_content/article/default.php (if there is a directory that doesn't exist then you will need to create it. for example, if you can only find the /templates/your-template/html under your templates folder the you will need to create the com_content folder under the html folder and then the article folder under the com_content folder).
You can then modify the default.php file to change the layout. Make sure you clear your Joomla cache to see your changes.
Using CSS and Language overrides worked out.
CSS : display:none to get rid of unwanted stuff and display:inline-block to put everything in a single line.
Changing Words in Joomla 3.4 backend :
from the control panel, click on Languages in the sidebar menu
Click 'overrides'
Choose the language in 'filter'
Click 'new'
in the form field next to 'search' button, type in the text you want to change
select the right string variable
Type in the wanted text
Save
done.

How to hide/show text content using PHP?

I am confused and not sure why this code is not working.
Here is the original code :
//start date to end date
<?php if($show5 < $show6) { ?>
<a>show content</a>
<?php }?>
If 'start date' and 'end date' values are empty then I want to remove or hide <?php if($show5 < $show6) { ?> <?php }?> and 'show content'.
And if 'start date' and 'end date' values are not empty then I want to remove or hide <?php if($show5 != '' && $show6 != '') { ?> <?php }?> and show content. If start to end date are not expired and if start to end date are expired then hide the content.
<?php if($show5 != '' && $show6 != '') { ?>
//start date to end date
<?php if($show5 < $show6) { ?>
<?php } ?>
<a>show content</a>
<?php if($show5 != '' && $show6 != '') { ?>
<?php } ?>
<?php }?>
is this what you were trying to do?
<?php if ($show5 != '' && $show6 != '') { ?>
//start date to end date
<?php if (strtotime($show5) < strtotime($show6)) { ?>
<a>show5 content</a>
<?php } ?>
<?php if (strtotime($show5) > strtotime($show6)) { ?>
<a>show6 content</a>
<?php } ?>
<?php } ?>
The bottom code was not necessary and therefore it was throwing an error. Also the html had to be moved few lines top and you were missing one <?php } ?>
I am not sure at all what are you trying to do... BTW, you don't need to put each sentence between <?php ?> brackets, just until you turn to html:
<?php if($show5 != '' && $show6 != '') {
//start date to end date
if($show5 < $show6) {
}?>
<a>show content</a> <<<---- This is outside the php block, if you want it inside you can do it with echo "<a>show content</a>";
<?php if($show5 != '' && $show6 != '') {
}
}?>
Update
<?php if($show5 != '' && $show6 != '') {
echo "<a>show content</a>";
}
else{
$curDate = date(); //currentDate
if($show5 <= $curDate && $curdate < $show6) {
echo "<a>show another content</a>";
}
}?>
Notice that the date() function can be formatted as you want to match $show5 and $show6. And viceversa, this variables can be formatted to match the date() format: https://secure.php.net/manual/es/function.date.php.
If you modify this code a bit you can make it post some content depending on many different parameters. Also, you could store the content in some other variables, and then post it after all of the ifs block

Show Ads In Middle Of Results

I'm currently using sphider on one of my websites, my questions is how can I break the results page into 2 parts to add a 200px break to place a ad slot.
Code:
<?php
extract($search_results);
?>
<?php if ($search_results['did_you_mean']){?>
<div id="did_you_mean">
<?php echo $sph_messages['DidYouMean'];?>: <?php print $search_results['did_you_mean_b']; ?>?
</div>
<?php }?>
<?php if ($search_results['ignore_words']){?>
<div id="common_report">
<?php while ($thisword=each($ignore_words)) {
$ignored .= " ".$thisword[1];
}
$msg = str_replace ('%ignored_words', $ignored, $sph_messages["ignoredWords"]);
echo $msg; ?>
</div>
<?php }?>
<?php if ($search_results['total_results']==0){?>
<div id ="result_report">
<?php
$msg = str_replace ('%query', $ent_query, $sph_messages["noMatch"]);
echo $msg;
?>
</div>
<?php }?>
<?php if ($total_results != 0 && $from <= $to){?>
<div id ="result_report">
<?php
$result = $sph_messages['Results'];
$result = str_replace ('%from', $from, $result);
$result = str_replace ('%to', $to, $result);
$result = str_replace ('%all', $total_results, $result);
$matchword = $sph_messages["matches"];
if ($total_results== 1) {
$matchword= $sph_messages["match"];
} else {
$matchword= $sph_messages["matches"];
}
$result = str_replace ('%matchword', $matchword, $result);
$result = str_replace ('%secs', $time, $result);
echo $result;
?>
</div>
<?php }?>
<?php if (isset($qry_results)) {
?>
<div id="results">
<!-- results listing -->
<?php foreach ($qry_results as $_key => $_row){
$last_domain = $domain_name;
extract($_row);
if ($show_query_scores == 0) {
$weight = '';
} else {
$weight = "[$weight%]";
}
?>
<?php if ($domain_name==$last_domain && $merge_site_results == 1 && $domain == "") {?>
<div class="idented">
<?php }?>
<b><?php print $num?>.</b> <?php print $weight?>
<?php print ($title?$title:$sph_messages['Untitled'])?><br/>
<div class="description"><?php print $fulltxt?></div>
<div class="url"><?php print $url2?> - <?php print $page_size?></div>
<?php if ($domain_name==$last_domain && $merge_site_results == 1 && $domain == "") {?>
[ More results from <?php print $domain_name?> ]
</div class="idented">
<?php }?>
<br/>
<?php }?>
</div>
<?php }?>
<!-- links to other result pages-->
<?php if (isset($other_pages)) {
if ($adv==1) {
$adv_qry = "&adv=1";
}
if ($type != "") {
$type_qry = "&type=$type";
}
?>
<div id="other_pages">
<?php print $sph_messages["Result page"]?>:
<?php if ($start >1){?>
<?php print $sph_messages['Previous']?>
<?php }?>
<?php foreach ($other_pages as $page_num) {
if ($page_num !=$start){?>
<?php print $page_num?>
<?php } else {?>
<b><?php print $page_num?></b>
<?php }?>
<?php }?>
<?php if ($next <= $pages){?>
<?php print $sph_messages['Next']?>
<?php }?>
</div>
<?php }?>
<div class="divline">
</div>
I'm also not aware of a live PHP code editor, if you know of one please comment and share so I can add a link!
Presuming $from and $to are the result numbers, so you're displaying "Showing results 10 to 30 of 100" for example:
<div id="results">
<!-- results listing -->
<?php $adbreak = ($to - $from) / 2;
<?php foreach ($qry_results as $_key => $_row){
<?php if ($adbreak == 0) { ?>
<div id="results-adbreak">
<img src="buy-a-car.jpg" alt="one careful owner!" />
</div>
<?php }
$adbreak--;
?>
// rest of your code
This will put a div approximately (give or take one) half way down your page of results. You can obviously replace the ad with a call to whatever you want.
adding something like:
<?php $adbreak = ($to - $from) / 2;
<?php if ($adbreak < 5) $adbreak = -1; ?>
will ensure that it doesn't display at all if the results list is too short.
If you don't know $to and $from in advance, you can still do it, but you'll have to calculate the equivalent from the query result first.

Do list separated by date PHP

I need your help.
I'm creating a reporting system and I need it to list all the reports that groups only in blocks according to the date.
ex:
Today - May 23
a result
result 2
May 22
result 3
4 results
5 results
May 21
6 results
7 results
The listing I can do it quietly, the problem is to distinguish the date to be right within the respective block.
My code:
<?php
$data_anterior = "0000-00-00";
$data_hoje = date("Y-m-d");
//Se houverem registros
foreach($notificacoes AS $notif) :
?>
<?
//Verifica a data e faz o tratamento
$data_cadastro = date("Y-m-d", strtotime($notif->data_cadastro));
?>
<?php if($data_cadastro == $data_hoje && $data_anterior != $data_cadastro) { ?>
<h4>Hoje <span><?php echo $CI->funcoes->data_abreviada($data_cadastro); ?></span></h4>
<ul class="list-notificacoes">
<?php } ?>
<?php if($data_cadastro < $data_hoje && $data_anterior != $data_cadastro) { ?>
<div class="graybox">
<header class="clearfix">
<h4><?php echo $CI->funcoes->data_abreviada($data_cadastro); ?></h4>
Toggle
</header>
<ul class="list-notificacoes">
<?php } ?>
<li class="clearfix">
<div class="box-left">
<span class="icon-lista-ate"> </span>
<?php echo stripslashes($usuario->nome); ?>
<span>fez tal tarefa</span>
<?php echo stripslashes($evento->titulo); ?>
</div>
<div class="box-right">
<span><?php echo date("H:i", strtotime($notif->data_cadastro)); ?></span>
<a class="icon-close ir" href="">Excluir</a>
</div>
</li>
<?php if($data_cadastro == $data_hoje && $data_anterior != $data_cadastro) { ?>
</ul>
<?php } ?>
<?php if($data_cadastro < $data_hoje && $data_anterior != $data_cadastro) { ?>
</ul>
</div>
<?php } ?>
<?php $data_anterior = date("Y-m-d", strtotime($notif->data_cadastro)); ?>
<?php endforeach; ?>
My problem is with the closing of the blocks and thus it breaks the code.
There's something wrong in my IF, someone help me?
I think it is a typo.
After the foreach statement "php" is missing from the opening tag:
<? instead of
<?php
//Verifica a data e faz o tratamento
$data_cadastro = date("Y-m-d", strtotime($notif->data_cadastro));
?>)
See if this fixes your problem.

Categories